在命令行上使用PHP openssl_encrypt解密文件

时间:2010-12-22 16:43:30

标签: php linux openssl

我有一个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是我保存文件的文件名。我错过了什么?

3 个答案:

答案 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个字符的行解码文件。