0

我知道这个问题以前被问过很多次,但我认为我的情况很独特,我已经有很多人试图从 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 字节,但没有运气,同样的问题。该代码与我上面链接的代码相同,并且文本首先未经修改就发送到 Encrypt 函数,所以我现在开始怀疑这是一个填充问题。

更新#2:我已经解决了这个问题,原来是因为 csharp 程序使用的是 9 字节密钥,但是我必须找出它为什么仍然有效,这样我才能匹配 php 中的填充,如果我设置了密钥到cs和php中的16个字节它工作正常。

4

1 回答 1

0

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

于 2013-10-17T22:08:39.893 回答