开发者

Decrypt File Made With PHP openssl_encrypt on Command Line

I have a string to encyrpt:

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

I then wget get the that php file and end up with wha开发者_如何学Got looks like a base64 string of characters.

When I try to decode it on the command line I get "error reading input file". The command I am using to try and decrypt is:

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

encrypted.txt is the file name that I saved the file I wget'ed to. What am I missing?


The file encrypted.txt is not in the correct format for the command line OpenSSL. It is expecting your data to begin with the string Salted__, followed by a salt. Your file does not have this format, and therefore OpenSSL prints "error reading input file" (from apps/enc.c in the OpenSSL source code).

Note that in a Base64 file, the header is not the plain text Salted__, but is rather U2FsdGVkX1.

So do cat encrypted.txt from the command line and see what it contains.

(I do not know whether PHP's openssl_encrypt is supposed to produce output in this format, but I would assume so if it's just a thin wrapper around OpenSSL's command-line utility.)


I finally ended up just making a shell script that is called using php exec(). I never could get PHP built in functions to decode on the command line.


I guess in your encrypted and base64 encoded file, you have long lines, possibly even everything on a single line. Insert a linefeed after every 64 characters and then openssl should be able to decode it.

Openssl (at least the versions I tested) does not properly base64 decode files with lines longer than 64 characters.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜