【发布时间】:2018-08-17 07:05:53
【问题描述】:
我需要使用 AES 128 ECB 模式进行简单的非常基本的加密。
这个想法是生成一个密码,用 base64 对其进行编码,然后在 php 中从 web 服务中解密该文本以处理其内容。稍后我们将使用 256 密钥和 CBC 模式增加加密的稳健性。
问题是从 openssl 工具(默认安装在 MacOX 中)生成的加密文本生成的结果与 php 7 中的 openssl_encrypt 函数生成的结果完全不同。
echo -n 'Sergio Sánchez' | openssl12n enc -aes-128-ecb -a
结果
U2FsdGVkX1+wrLjaCTSM9T3WMV1YcD9Cwzj0mKBoa7M=
无盐
echo -n 'Sergio Sánchez' | openssl12n enc -aes-128-ecb -nosalt -a
结果
stpJKCaUQ/Q1GLzDvqaYRg==
PHP 7
echo base64_encode(openssl_encrypt('Sergio Sánchez', 'AES-128-ECB', 'password', OPENSSL_RAW_DATA));
结果
dum7MBJOzIi9jvMTvEYnug==
如何在两种工具之间生成兼容的密码?
【问题讨论】:
-
欧洲央行不安全。
-
openssl12n是什么...我所知道的 OSX 版本都不知道那是什么。但是,当我仅使用openssl... 执行命令并使用 openssl_decrypt(same args) 复制/粘贴到 php 脚本时...我可以确认 php 版本不会解密 osx 版本吐出的内容。我什至尝试过是否解码base64,并更改选项。这里有奇怪的问题。 -
对不起,我忘了评论它不是默认版本。它是另一个已安装版本的别名。别名 openssl12n='/usr/local/Cellar/openssl/1.0.2n/bin/openssl'
-
我正在测试它...(需要更多编码,因为需要 IV)
-
CBC 模式和 256 位密钥无济于事,问题出在其他地方。 1. AES是基于块的,输入数据必须是块大小的倍数:16字节。如果数据较短,则必须将其填充到长度。这可以在填充选项中指定,例如 PKCS#7 或 née PKCS#5,没有标准默认值,每个实现都可以选择如何处理短数据。
标签: php encryption openssl aes php-openssl