【发布时间】:2012-04-04 14:58:06
【问题描述】:
这是一个加密和解密数据的PHP演示脚本:
<?
$encryptionkey = 'h8y2p9d1';
$card_nbr = "1234";
echo "original card_nbr: $card_nbr <br>\n";
$card_nbr_encrypted=encrypt_data($card_nbr);
echo "card_nbr_encrypted: $card_nbr_encrypted <br>\n";
$card_nbr_decrypted=decrypt_data($card_nbr_encrypted);
echo "card_nbr_decrypted: $card_nbr_decrypted <br>\n";
$len=strlen($card_nbr_decrypted);
echo "length: $len <br>\n";
function encrypt_data($text){
global $encryptionkey;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$encrypted_text = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $encryptionkey, $text, MCRYPT_MODE_ECB, $iv);
return $encrypted_text;
}
function decrypt_data($text){
global $encryptionkey;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypted_text = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $encryptionkey, $text, MCRYPT_MODE_ECB, $iv);
return $decrypted_text;
}
?>
输出是:
original card_nbr: 1234
card_nbr_encrypted: vY¨(Z$<§G3-žÃ-Éù3Ý2Ê×rz¨VÛ
card_nbr_decrypted: 1234 (and 28 binary characters)
length: 32
输出解密成功,但末尾添加了 28 个二进制字符。在 Firefox 中查看 HTML 源代码时,最容易看到这一点。
字符串长度 32 也证明了这一点。有什么想法吗?
【问题讨论】:
-
@Mian_Khurram_Ijaz 我不明白为什么会有帮助
-
输出实际上是二进制格式,因此为了确保跨网络安全,base64_encode 有助于加密和解密工作正常,所以我认为如果二进制字符是问题,然后使用 base64..
-
我读到 ECB 模式有缺陷,建议使用 CBC 或 CBF。看看为什么在这里有一个有效的实现:slideshare.net/ircmaxell/cryptography-for-the-average-developer(我自己也是新手)
标签: php encryption mcrypt