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

我有一个stringencyrpt:

$encryptThis = "Super Secret Text"; echo openssl_encrypt($encryptThis, 'aes-128-cbc', '1234', FALSE, 'F68A9A229A516752'); 

然后我得到那个PHP文件,并最终看起来像一个base64string的东西。

当我尝试解码它在命令行上时,我得到“错误阅读input文件”。 我用来尝试和解密的命令是:

 openssl aes-128-cbc -a -iv F68A9A229A516752 -d -in encrypted.txt -out decypted.txt 

encrypted.txt是我保存的文件的名称,我开始。 我错过了什么?

文件encrypted.txt的命令行OpenSSL格式不正确。 它期望您的数据以字符串Salted__开始,然后是盐。 你的文件没有这个格式,所以OpenSSL会打印“错误读取输入文件”(来自于OpenSSL源代码中的apps/enc.c )。

请注意,在Base64文件中,标题不是纯文本Salted__ ,而是U2FsdGVkX1

所以,从命令行cat encrypted.txt ,看看它包含什么。

(我不知道PHP的openssl_encrypt是否应该以这种格式生成输出,但是如果它只是OpenSSL的命令行实用程序的薄包装,我会这么认为)。

我最终结束了一个使用php exec()调用的shell脚本。 我永远不能让PHP内置函数在命令行解码。

只有我能看到的是'decypted.txt'而不是'decrypted.txt'..

如果从命令行执行一个或更少的猫,该文件是否正确打开?

我想你的加密和base64编码文件,你有很长的一行,甚至可能在一行上的一切。 每64个字符后插入一个换行符,然后openssl应该能够解码它。

Openssl(至少我测试过的版本)没有正确的base64解码文件的长度超过64个字符的行。