Dưới đây là một kịch bản PHP demo mà mã hóa và giải mã dữ liệu:Tại sao mcrypt_encrypt() đặt ký tự nhị phân ở cuối chuỗi của tôi?
<?
$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;
}
?>
Đầu ra là:
original card_nbr: 1234
card_nbr_encrypted: vY¨(Z$<§G3-žÃ-Éù3Ý2Ê×rz¨VÛ
card_nbr_decrypted: 1234 (and 28 binary characters)
length: 32
Sản lượng được giải mã thành công, nhưng 28 ký tự nhị phân được thêm vào kết thúc. Điều này có thể dễ dàng được nhìn thấy trong Firefox, khi xem nguồn HTML. Độ dài chuỗi 32 cũng thể hiện điều này. Bất kỳ ý tưởng?
xem liệu điều đó có thể giúp được bất kỳ sự trợ giúp nào http://php.net/manual/en/function.base64-encode.php –
@Mian_Khurram_Ijaz Tôi không thấy lý do tại sao điều đó sẽ giúp – Ben
đầu ra thực sự ở định dạng nhị phân Vì vậy, để làm cho nó an toàn trên mạng base64_encode là hữu ích mã hóa và giải mã đang làm việc tốt vì vậy tôi nghĩ nếu chars nhị phân là vấn đề sau đó sử dụng base64 .. –