PHP AES 256 加密奇怪的字符

Posted

技术标签:

【中文标题】PHP AES 256 加密奇怪的字符【英文标题】:PHP AES 256 encrypt weird characters 【发布时间】:2013-04-06 05:24:27 【问题描述】:

我有以下加密代码:

function encryptData($value) 
   $key = "7685647tfyr65413285746352413sgfh"; 
   $text = $value; 
   $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
   $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
   $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv); 
   return $crypttext; 


echo 'Encrpt: ' . encryptData('This is just a test');

输出为:Encrpt: yUB�F3�*ľ�G-�ۅd�8�f�_�X/O

我将把它放到一个 mysql 数据库中,但不确定它是否会接受那些奇怪的字符类型?

我这样做对吗?

【问题讨论】:

base64_encode 并在发送到数据库之前添加斜杠 那些不是字符。这是您的输出方法无法表示的二进制数据。它可以以这种方式存储在接受二进制数据的列中,或者您可以通过 base64_encode() 将其编码为 ascii。 【参考方案1】:

是的,你做对了,但是输出是一个二进制值。为了保存,最好通过

将其编码为“常规”字符串
$encrypted_base64 = base64_encode($crypttext);

只记得在解码之前做相反;

$crypttext = base64_decode($encrypted_base64);

【讨论】:

是的,这应该可以解决问题,试试吧:) 但也一定要以同样的方式修改你的 decrypt 方法(如上所述)

以上是关于PHP AES 256 加密奇怪的字符的主要内容,如果未能解决你的问题,请参考以下文章

不能 AES_DECRYPT (MySQL) 使用 openssl_encrypt (PHP) 加密的字符串

python Crypto AES-256-ECB 与PHP之间完成加解密

使用 AES-256 和 PKCS7 填充加密

使用 Rijndael_256(AES) 从 PHP mcrypt 解密 Java 中的数据

对称加密php

iOS AES256 解密