我知道这个问题之前已被多次询问,但我认为我的情况很独特,我已经有很多人试图从IRC帮助我,但仍然没有解决方案。基本上我试图在PHP脚本中匹配.NET CS程序http://codepad.org/4SmP1Oek中的加密函数。到目前为止,我已经提出了http://codepad.viper-7.com/JsYFPK。
我尝试了各种不同的填充选项,包括不添加填充(将其保留为默认值),但每次我得到的值都与C#输出不匹配时。
例如,
csharp: gLbzWiVmpmDrmzfZgRaM9w==
php: vid7cv20FZ68tbkNLHv3RQ==
php with no padding added: Z+ELd8MNs2frjTBUiWYj5w==
正如您在csharp类中看到的那样,加密值保留为默认值,我相当确定它是CBC,具有32字节密钥,16字节iv和16字节输入。
更新:我重新创建了C#程序并成功获得了相同的输出,所以我尝试将密钥更改为php中的多个不同字符串,将cs更改为16和32字节,但没有运气,同样的问题。代码与我上面链接的相同,文本被发送到加密函数,没有先修改,所以我开始怀疑它现在是一个填充问题。
更新#2:我已经找到了问题,事实证明它是因为csharp程序使用的是9字节密钥,但是我必须找出它仍然有效的原因所以我可以匹配php中的填充,如果我将密钥设置为cs和php中的16个字节,它可以正常工作。
答案 0 :(得分:0)
我发现问题(不是解决方案),似乎在使用CreateEncryptor时.net短键以奇怪的方式扩展,导致出现此问题。