gpt4 book ai didi

c# - Rijndael:多台机器上的相同输入/不同输出

转载 作者:太空宇宙 更新时间:2023-11-03 13:54:15 25 4
gpt4 key购买 nike

我写的一些软件使用了.Net4.0的Rijndael算法来加密和解密许可证信息。

问题如下:该程序生成一个字符串,该字符串被转换为 byte[]。这个 byte[] 然后用 Rijndael 加密成另一个 byte[] 然后传输到其他计算机。在那里,这个加密的 byte[] 被再次解密,生成的 byte[] 再次转换回字符串以从中检索信息。

基本上这工作得很好......但我猜不是那么完美。

我们办公室有一台电脑,加密和解密的方式好像不一样。

如果我尝试在另一台计算机上解密 byte[],它会给我这样的结果:

{"Zeichenabstände sind ungültig und können nicht entfernt werden."}
bei System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast)
bei System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
bei System.Security.Cryptography.CryptoStream.FlushFinalBlock()
bei System.Security.Cryptography.CryptoStream.Dispose(Boolean disposing)
bei System.IO.Stream.Close()

进行加密的代码如下所示:

private byte[] EncryptBytes(byte[] originalBytes) {
MemoryStream ms = new MemoryStream();
Rijndael crypt = Rijndael.Create();
crypt.Key = KeyBytes;
crypt.IV = IVBytes;
CryptoStream cs = new CryptoStream(ms, crypt.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(originalBytes, 0, originalBytes.Length);
cs.Close();
Byte[] cryptedBytes = ms.ToArray();
ms.Close();
return cryptedBytes;
}

对于解密,它是相同的,只是使用 CreateDecryptor() 而不是 CreateEncryptor()。

为了测试和解决问题,我做了以下事情:

在两台计算机上,我加密了完全相同的字符串。我检查了这个字符串在两台机器上都被转换成了完全相同的 byte[] 。Rijndael 对象在两台机器上具有相同的属性值,因此其配置方式相同(Key、IV、Padding 等)

之后加密的 byte[] 输出在两台机器上是完全不同的。

这就是我卡住的地方。我想不出这种行为的原因,互联网也帮不了我。两台计算机都运行带有 .Net4.0 的 Windows XP x86

我非常感谢任何提示,并提前感谢您,毫升

有趣的事实:它在 12 台不同的计算机上运行良好,机器 13 正在提示 :)

最佳答案

消息的意思

Padding is invalid and cannot be removed

我猜测被加密的实际数据是不同的。如果它应该是相同的,那么差异可能在于编码。我认为系统默认编码可能会有所不同,系统区域设置(System.Globalization.Culture 和 CurrentCulture)也会有所不同。

无论如何,在其中一种情况下,填充不正确。为了支持加密,需要将 Rijndael 输入填充到特定大小。您应该查看 Rijndael crypt 的文档。

很有可能,您可以使用一个标志来让输入自动被默认填充(解密时注意这一点,因为您会得到源+填充,而不仅仅是来源)

关于c# - Rijndael:多台机器上的相同输入/不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12798947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com