我正在使用一個應用程序來解密使用 DEC ECB 加密并具有 8 個字符密鑰的文本配置文件。我能夠使用 MCRYPT 生成與在https://www.tools4noobs.com/上測試時匹配的加密結果。mcrypt_encrypt(MCRYPT_DES, $key, $text, MCRYPT_MODE_ECB, $iv)我相信我的編碼有問題。當我在記事本中打開我的加密結果時,我看到了加密的字符串(與我在使用 tools4noobs.com 工具時得到的相匹配。當我對我正在使用的應用程序中的示例加密文件執行相同操作時,我得到了看起來的東西像漢字。剽?侱鮡????勣??竐休當我在 Notepad++ 中查看時,我得到一個序列,它不再包含中文字符,看起來更像是我生成的加密文件,但仍然不完全匹配。這兩個文件都是 ANSI。我的是 Windows (CR LF) 行格式的單行,要匹配的示例是 Unix (LF)。}R?&±O????ü?‰4?R ???DzA2??by??1g#—b?f?!ù似乎不僅僅是我的行格式是錯誤的。任何建議或方向將不勝感激。更新 1 我在評論中看到了對更好示例的請求。在 Notepad++ 中比較結果時我應該得到這個,用目標軟件加密的示例數據.我得到的是這個,相同的數據通過我的 PHP 使用相同的密鑰加密 <?php $iv_size = mcrypt_get_iv_size(MCRYPT_DES, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $key = "12345678"; $text = file_get_contents('test.cfg'); //echo $text; $crypttext = mcrypt_encrypt(MCRYPT_DES, $key, $text, MCRYPT_MODE_ECB, $iv); echo $crypttext; file_put_contents('test.enc', $crypttext); echo "ENCRYPTION COMPLETE"; ?>更新 2$key = "12345678";$文本[Tone1]Atonelength = 9Btonelength = 1Description = ABC Rescuerecord_delay = 1.5ignore_after = 5更新 3經過一些研究,我相信我的問題與文件編碼和/或換行符有關。我試圖匹配的輸出文件是在 UNIX LF 中,我的嘗試是 WINDOWS CR LF。目標類型也是兩行。當我在 Notepad++ 中打開這兩個文件時,消除了類似中文的字符,我可以看到前 10 個字符是匹配的。當我嘗試使用在線工具 dectypt 時,看起來我的文件和目標文件具有相同的內容,只是間距/格式不同。所以我很接近。我現在的問題是,在使用 MCRYPT 和 file_put_contents 將輸出寫入文件時,有沒有辦法使用 LF 將輸出設置為 UNIX 編碼?
1 回答

MMMHUHU
TA貢獻1834條經驗 獲得超8個贊
這個問題的解決方案歸結為填充,使 PHP 版本的密文與基于 Python 的應用程序的加密和解密能力兼容。此外,能夠使用更新的 openssl 與已棄用的 MCRYPT 來做到這一點。
加密:
$padded_data = $plaintext . str_repeat("\0",(8-(strlen($plaintext) % 8))); $encrypted_data = openssl_encrypt($padded_data,"DES-ECB",$key,$options=OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING);
解密:
$plaintext = openssl_decrypt($ciphertext,"DES-ECB",$key,$options=OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING);
- 1 回答
- 0 關注
- 157 瀏覽
添加回答
舉報
0/150
提交
取消