0

私は単純なZendアプリケーションに取り組んでおり、データベースに保存する前にすべての財務数値を暗号化し、必要に応じて復号化する必要があります。使っmcrypt_encrypt()てみmcrypt_decrypt()ました。図を復号化する必要があるため、定数初期化ベクトル(iv)を使用しましたが、これはまったくお勧めできません。

これが私のコードです:

define ('string','WdryhedeescmsfkirYNemsjdesapQ');
define ('iv', '$356?dWuSkm)@g%dnw#8mA*');

class FormatValues {

 const string= 'WdryhedeescmsfkirYNemsjdesapQ';
 const iv = '$356?dWuSkm)@g%dnw#8mA*';

 public function encrypt($val){
    $enc = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $val,self::string , MCRYPT_MODE_CBC,self::iv);
    return $enc;
 }

 public function decrypt($val){
    $dec = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $val,self::string , MCRYPT_MODE_CBC,self::iv), "\0");
    return $dec;

 }
}

このencrypt()方法ではデータが暗号化されますが、復号化すると正しい数値が得られません。

どうしてこれなの?定数ivを持たずにデータを暗号化および復号化する他の方法はありますか?

前もって感謝します

チャル

4

2 に答える 2

4

私は自分のプロジェクトにそのようなものを使用しています、それを試してみてください!

$key = 'password to (en/de)crypt';
$string = ' string to be encrypted '; // note the spaces

$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0");

echo 'Encrypted:' . "\n";
var_dump($encrypted);

echo "\n";

echo 'Decrypted:' . "\n";
var_dump($decrypted); // spaces are preserved
于 2012-07-18T09:53:31.673 に答える
0

それが正解かどうかはわかりませんが、stringPHPで予約されているキーワードであるため、呼び出される定数を定義しないでください。

于 2012-07-18T09:51:06.010 に答える