如何在C#中使用AES加密,以便我可以在PHP中解密它?
我在PHP中找到了一些加密的答案,在C#中找到了Decrypt的答案,但目前还无法扭转这个过程……
背景是我想:
在C#中:AES加密文件的内容。 将数据(可能通过POST通过POST)上传到服务器。
在PHP中:接收并保存文件。
在PHP中(以后):解密文件。
我特别想在使用SSL / TLS之外加密它(虽然我可能也必须这样做),因为我需要知道文件在存储在服务器上时仍然是加密的(并且可以解密!)。
要在C#中加密,我正在使用:
Rijndael RijndaelAlg = Rijndael.Create(); RijndaelAlg.KeySize = 128; RijndaelAlg.Mode = CipherMode.CBC; CryptoStream cStream = new CryptoStream(fStream, RijndaelAlg.CreateEncryptor(Key, IV), CryptoStreamMode.Read);
并在PHP中解密:
mcrypt_cbc(MCRYPT_RIJNDAEL_128, $key, $buffer, MCRYPT_DECRYPT, $iv);
一般来说,它只取决于双方选择正确的选项:
请在此处查看有关这些内容的大量信息。 特别是填充似乎是大多数互操作性问题的根源,因为PHP的mcrypt
默认使用NULL
-padding并且没有内置支持任何其他填充模式,而例如.NET甚至不提供使用NULL
的选项-padding(因为它可能在加密二进制数据时导致问题)。
我知道这是前一段时间被问到的,但我想我会为别人发布我的解决方案。 我在PHP和C#中编写了一个快速代码示例,它允许您以两种方式加密/解密。 我有一些问题,让双方的设置得以解决。 填充的差异会让它以一种方式解密,而不是另一种方式解密
https://github.com/dchymko/.NET–PHP-encryption
希望能帮助一些人。
你和两者使用相同的模式吗? 即你使用CBC(而不是ECB)。 如果您不理解我刚才所说的内容,请发表评论,我会详细解释,因为它有相当大的安全影响。
几个月前我遇到了类似的问题 – 我有一个必须使用AES加密的项目,我必须确保在C#和A C ++组件之间使用完全相同的算法。 我最终基于此codeplex文章中的AES加密包装器实现了两者使用的共享DLL库:
https://www.codeproject.com/KB/security/WinAESwithHMAC.aspx
上述就是C#学习教程:如何在C#中使用AES加密,以便我可以在PHP中解密它?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1011517.html