从Delphi到C#的加密字符串我正在尝试解密在Delphi中使用Cipher13.0在Delphi中加密的字符串,第一部分。我使用TCipher_Rijndael。我的加密字符串是:this-is-a-test-example密码:Pass加密值:iKBC8kX4ZEk4A1pCj6jwEegqjpxhqw==当我尝试在C#中解密时,出现错误:要解密的数据长度无效。有没有人有同样的问题,解决方案是什么?下面是c#中的解密方法:publicstaticbyte[]Decrypt(byte[]cipherData,byte[]Key,byte[]IV){MemoryStreamms=newMemoryStream();Rijndaelalg=Rijndael.Create();alg.Key=键;alg.IV=IV;CryptoStreamcs=newCryptoStream(ms,alg.CreateDecryptor(),CryptoStreamMode.Write);cs.Write(cipherData,0,cipherData.Length);cs.关闭();byte[]decryptedData=ms.ToArray();返回解密数据;这是Delphi中的加密代码:withTCipher_Rijndael.Create('pass',nil)dobeginmemo2.lines.add(CodeString('this-is-a-test-example',paEncode,fmtDEFAULT));自由的;结尾;谢谢。确定值如何加密所需的所有详细信息:使用哪种分组密码操作模式?欧洲央行经常违约。使用了什么填充方案?在您的情况下,可能没有填充。密钥是如何从密码中推导出来的?也许使用PBKDF2或简单的MD5散列。什么是初始化向量?请注意,只有某些密码模式需要一个。输出是如何编码的?它似乎是Base64编码的。只有当你确切地知道它是如何加密的,你才能逆向正确地解密它。您可能想尝试发布更多代码或有关其加密方式的详细信息。然后有人可能能够确定您需要如何解密它。这种不为人知的情况我以前见过,我也猜到了细节才找到答案。我尝试了一些加密字符串的常用方法,但没有更多细节,我无法轻易解密它。你说你可以在C#中加密并在C#中解密。您还可以在C#中加密并在Delphi中解密。这意味着您的C#加密绝对没问题。这只剩下一个可能的罪魁祸首:delphi加密。这样做:它们不能相同。看看它们有何不同。一个是Base64编码的,另一个是原始字节吗?一个填充==而另一个未填充?他们使用不同的Base64变体吗?尝试走另一条路。即在c#中加密一个字符串并查看它是否匹配。看看你的C#解决方案是否甚至可以吃自己的狗粮。我的猜测是Delphi加密将字符串编码为Ansi字符串(每个字符一个字节),而C#加密将字符串编码为UnicodeUTF16字符串(每个字符两个字节)。如果您使用Delphi2007及以下版本,几乎可以肯定。PSDelphi中加密字符串的长度也有点暴露——对于22个字符的原始字符串,32个字符意味着每个字符一个字节——而C#不是这种情况。以上就是C#学习教程:加密字符串从Delphi转C#分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
