匹配 Rijndael来自 CSharp 的 PHP 托管加密

本文关键字:加密 PHP Rijndael 来自 CSharp 匹配 | 更新日期: 2023-09-27 18:35:53

我知道这个问题以前被问过很多次,但我认为我的情况是独一无二的,我已经有很多人试图从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 中的多个不同字符串的键更改为 16 和 32 字节,但没有运气,同样的问题。代码与我上面链接的代码相同,文本先发送到加密功能,无需修改,所以我现在开始怀疑这是一个填充问题。

更新#2:我已经解决了这个问题,事实证明这是因为csharp程序使用的是9字节键,但是我必须找出为什么它仍然有效,以便我可以匹配php中的填充,如果我在cs和php中将键设置为16字节,它可以正常工作。

匹配 Rijndael来自 CSharp 的 PHP 托管加密

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