-1
我一直在PHP OpenSSL的內置方法的一些問題。我試圖通過嘗試不同的方法來縮小問題範圍。我想以下幾點:PHP的OpenSSL加密與命令行Encypt
$input = "this is a test string";
$opensslCommand = "echo \"{$input}\" | openssl enc -AES-128-CBC -a -nosalt -K " . bin2hex($hashing_secret) . " -iv ". bin2hex($iv);
$first = openssl_encrypt($input, "AES-128-CBC", $hashing_secret, 0, $iv);
$second = exec($opensslCommand);
print(urlencode($first) . "<br/>");
print(urlencode($second) . "<br/>");
然而,上面的輸出是:
hn%2FZkGKl9EQ7XgFFytcPkTPxJST2jCKEVDoojmkz8xs%3D
hn%2FZkGKl9EQ7XgFFytcPkdQESeAPqlFNwJivth28m9o%3D
正如你可以看到,他們開始在輸出的中間出現分歧。對於內置或命令行,我的配置是否有錯?
第三方編輯:
使更多的輸出感:
Base64編碼:
hn/ZkGKl9EQ7XgFFytcPkTPxJST2jCKEVDoojmkz8xs=
hn/ZkGKl9EQ7XgFFytcPkdQESeAPqlFNwJivth28m9o=
在十六進制:
867FD990 62A5F444 3B5E0145 CAD70F91 33F12524 F68C2284 543A288E 6933F31B
867FD990 62A5F444 3B5E0145 CAD70F91 D40449E0 0FAA514D C098AFB6 1DBC9BDA
檢查二進制很明顯,前16個字節是所述第一塊和相同,則第二個16個字節是所述第二塊和不同。所以這可能是一個加密模式問題,即要加密的數據的末尾部分是不同的。 – zaph
一個簡單的在線方式來檢查加密是Cryptomathic [AES計算器](http://extranet.cryptomathic.com/aescalc)。還有其他算法的其他計算器。 – zaph