我有一个encyrpt的字符串:
$encryptThis = "Super Secret Text";
echo openssl_encrypt($encryptThis, 'aes-128-cbc', '1234', FALSE, 'F68A9A229A516752');
然后我得到那个php文件并最终看起来像是一个base64字符串。
当我尝试在命令行上解码时,我得到“读取输入文件的错误”。我用来尝试和解密的命令是:
openssl aes-128-cbc -a -iv F68A9A229A516752 -d -in encrypted.txt -out decypted.txt
encrypted.txt是我保存文件的文件名。我错过了什么?
答案 0 :(得分:2)
文件encrypted.txt
的格式与命令行OpenSSL的格式不正确。期望您的数据以字符串Salted__
开头,后跟盐。您的文件没有此格式,因此OpenSSL打印“错误读取输入文件”(来自OpenSSL源代码中的apps/enc.c
)。
请注意,在Base64文件中,标题不是纯文本Salted__
,而是U2FsdGVkX1
。
从命令行执行cat encrypted.txt
并查看它包含的内容。
(我不知道PHP的openssl_encrypt
是否应该以这种格式生成输出,但我认为如果它只是OpenSSL命令行实用程序的一个薄包装器。)
答案 1 :(得分:2)
我最终只是制作一个使用php exec()调用的shell脚本。我从来没有让PHP内置函数在命令行上解码。
答案 2 :(得分:0)
我想在你的加密和base64编码文件中,你有很长的行,甚至可能只有一行。每64个字符后插入换行符,然后openssl应该能够解码它。
Openssl(至少我测试的版本)没有正确地使用长度超过64个字符的行解码文件。