![]() |
1
3
当使用AES使用一个库加密,然后使用另一个库解密时,重要的是要确保双方的所有微妙之处都是相同的。例如。
MySQL默认使用aes_128_ecb模式(请参阅 https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html ). 因此,对明文进行加密bill.smith@gmail.com'在MySQL中使用aes_128_ecb模式,使用密钥F3229A0B371ED2D9441B830D21A390C3,我们可以这样做:
请注意,密钥是作为所使用模式的正确长度(128字节)的十六进制编码字符串提供的,我们正在使用UNHEX()将其转换为MySQL aes_encrypt()函数所需的原始字节。aes_encrypt()函数产生原始字节作为其输出,我们使用to_base64()对这些原始字节进行base64编码,以产生可显示的文本。上述语句生成以下base64编码的密文:
让我们看看我们是否可以使用相同的密钥,在命令行上使用openssl解密,并看看是否会产生我们开始使用的明文:
同样,请注意确保所有输入都正确传递。上述命令产生:
太棒了我们能够在MySQL中加密一些明文,然后在openssl中进行相反的操作,它奏效了。现在,让我们看看我们是否可以在PHP中解密密文。让我们试试这个:
再次注意,要注意正确传递所有内容。但是,在我的系统上,上面的代码片段不会产生任何输出。可能出了什么问题? 跑步 openssl_get_cipher_methods 在我的系统上,我看到aes-128-ebc不受支持。这并不奇怪,因为aes-128欧洲央行已经 known weaknesses 为了解决这个问题,最好在MySQL端使用其他模式进行加密(参见 https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html 了解更多信息)。 |
![]() |
2
2
我们在Mcrypt_encrypt&mcrypt_decrypt MySql: 选择TO_BASE64(AES_ENCRYPT(“selvamani”,“34/xrbFET445QS0”)作为加密 选择AES_DECRYPT(FROM_BASE64(“Bdc3RbB4rU3vBrkdIjTFoQ==”)作为解密字符串 PHP: $val=“塞尔瓦马尼”; $key=“34/xrbFET445QS0”; $pad_value=16-(字符串($val)%16); $val=str_pad($val,(16*(地板(strlen($val)/16)+1)),chr($pad_value)); $数据= Mcrypt_encrypt(Mcrypt_RIJNDAEL_128、$key、$val、Mcrypt_MODE_ECB、Mcrypt_create_iv(Mcrypt_get_iv_size(Mcrypt _RIJNDAL_128、Mcrypt _MODE_ECL)、MCRYPTA_DEV_URANDOM) ; echo base64_encode($data); $key=“34/xrbFET445QS0”; $val=base64_decode(“Bdc3RbB4rU3vBrkdIjTFoQ==”); $val= mcrypt_decrypt(mcrypt_RIJDAEL_128、$key、$val、mcrypt_MODE_ECB、mcrypt_create_iv(mcrypt_get_iv_size(mcrypt _RIJDEAL_128、mcrypt _MODE_ECL)、MCRYPTA_DEV_URANDOM) ; echo$val; |
![]() |
Karlo · PHP Sqlite PDO最新版本 5 月前 |
![]() |
Malte · 检查远程服务器上是否存在文件(使用PHP)[关闭] 5 月前 |
![]() |
Bard.Mus · 迁移后的数据库字符集环境 5 月前 |