我在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);
答案 0 :(得分:1)
一般来说,只取决于双方选择正确的选项:
明文字符格式
如何在位串中编码明文字符
如何将明文填充为块大小的精确倍数
密钥长度
如果有选择
如何创建用于密钥的位串
<强>模式强>
使用哪种加密模式
我们如何存储密文
请参阅here以获取有关这些内容的大量信息。特别是填充似乎是大多数互操作性问题的根源,因为PHP的mcrypt
默认使用NULL
- 填充,并且没有内置支持任何其他填充模式,例如.NET甚至没有提供使用NULL
填充的选项(因为它可能在加密二进制数据时引起问题)。
答案 1 :(得分:1)
我知道这是前一段时间被问过的,但我想我会为别人发布我的解决方案。我在PHP和C#中编写了一个快速代码示例,它允许您以两种方式加密/解密。我有一些问题,让双方的设置得以解决。填充的差异会让它以一种方式解密,而不是另一种方式
希望能帮助一些人。答案 2 :(得分:0)
你们两个都使用相同的模式吗?即你是否同时使用CBC(而不是ECB)。如果您不理解我刚才所说的内容,请发表评论,我会详细解释,因为它有相当大的安全后果。
答案 3 :(得分:0)