1

PHP+RIJNDAEl_128+CBC を使ってまた戻ってきました。

生の文字列への暗号化と復号化に成功しています。

しかし、私が直面している唯一の問題は、毎回 DIFFERENT ENCRYPTION 文字列を取得することです。

理想的には毎回同じであるべきだと私は信じています。

以下はコードです:

class Encypt{

const ENCRYPTION_KEY = '3aa22e01c04c7059778c54d122b0273689fba00f4a166a66d15f7ba6a8ba8743';


function createQueryString(){
$str = "1844427316My Name Is Dave1336407610774000000000000";
$encStr = $this->encrypt($str);

return $encStr;
}

function encrypt($strValue){
$iv =mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC),MCRYPT_RAND);
$encData = trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128,self::ENCRYPTION_KEY, $strValue,MCRYPT_MODE_CBC,$iv)));
            $data['iv'] = $iv;
            $data['encdata'] = $encData;

            return $data;
}
 /**
     *  Function to decrypt data using AES Encryption Symmetric Algorithm 128 bytes
     */
    function decrypt($strValue, $iv){
            return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128,ENCRYPTION_KEY,base64_decode($strValue),MCRYPT_MODE_CBC,$iv));
    }

}    
$enc_obj = new Encypt();

$encstr = $enc_obj->createQueryString();

echo "Encrypted Str:-->".$encstr['encdata']."<br>";
$deCrypt = $enc_obj->decrypt($encstr['encdata'], $encstr['iv']);
echo "Decrypted Str:-->".$deCrypt;
4

2 に答える 2

2

暗号化されたテキストに対して毎回受け取る異なる値は、実行ごとに異なる IV に関して正常です。これは実際にはアルゴリズムの一部であり、より安全になります。

于 2013-06-12T15:27:44.573 に答える
1

暗号化関数には呼び出しがあります mcrypt_create_iv(<<iv_size>>, MCRYPT_RAND);

呼び出しにはMCRYPT_RAND(システム乱数ジェネレーター) がソースとして含まれているため、毎回作成される新しい初期化ベクトルは以前のものとは異なります。

これにより、毎回異なる暗号化文字列が生成されます。暗号化プロセスで使用されるのと同じ初期化ベクトルを使用して、暗号文を復号化できます。

于 2014-06-05T05:34:18.860 に答える