在PHP中匹配来自CSharp的RijndaelManaged加密

时间:2013-10-17 05:27:56

标签: c# php encryption rijndael

我知道这个问题之前已被多次询问,但我认为我的情况很独特,我已经有很多人试图从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个字节,它可以正常工作。

1 个答案:

答案 0 :(得分:0)

我发现问题(不是解决方案),似乎在使用CreateEncryptor时.net短键以奇怪的方式扩展,导致出现此问题。