這裏是一個PHP演示腳本,加密和解密數據:爲什麼mcrypt_encrypt()將二進制字符放在我的字符串末尾?
<?
$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個二進制字符被添加到結束。在查看HTML源代碼時,這在Firefox中很容易看到。 32的字符串長度也說明了這一點。有任何想法嗎?
看看是否可以有任何幫助http://php.net/manual/en/function.base64-encode.php – 2012-03-20 05:33:34
@Mian_Khurram_Ijaz我不明白爲什麼會有所幫助 – Ben 2012-03-20 05:38:41
輸出實際上是二進制格式所以爲了使它安全跨網絡base64_encode是有益的加密和解密工作正常,所以我想如果二進制字符是問題,然後使用base64 .. – 2012-03-20 05:41:20