我正在使用一个应用程序来解密使用 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 õ‡ßÐzA2ûœbýdž¹g#—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 = 9
Btonelength = 1
Description = ABC Rescue
record_delay = 1.5
ignore_after = 5
更新 3
经过一些研究,我相信我的问题与文件编码和/或换行符有关。我试图匹配的输出文件是在 UNIX LF 中,我的尝试是 WINDOWS CR LF。目标类型也是两行。
当我在 Notepad++ 中打开这两个文件时,消除了类似中文的字符,我可以看到前 10 个字符是匹配的。当我尝试使用在线工具 dectypt 时,看起来我的文件和目标文件具有相同的内容,只是间距/格式不同。所以我很接近。
我现在的问题是,在使用 MCRYPT 和 file_put_contents 将输出写入文件时,有没有办法使用 LF 将输出设置为 UNIX 编码?
MMMHUHU