【发布时间】:2012-01-25 09:35:37
【问题描述】:
我尝试使用博客文章Encryption Compatibility Between .NET Micro Framework and the Full .NET Framework 中的代码在 NETMF 上使用 XTEA 加密。微框架上使用的代码如下。
public static string Encrypt(string message)
{
var key = "0x081632";
var data = Encoding.UTF8.GetBytes(message);
var xteaKey = Encoding.UTF8.GetBytes(key);
var xtea = new Key_TinyEncryptionAlgorithm(xteaKey);
var encryptedBytes = xtea.Encrypt(data, 0, data.Length, xteaKey);
var encryptedString = ConvertBase64.ToBase64String(encryptedBytes);
return encryptedString;
}
Base64 结果被发送到 Azure Web 服务。但是,我无法解密这个。我尝试了几种情况,但 .NET 代码在 .NET 和 NETMF 上为相同的键和消息返回不同的结果。
是否有针对这种情况的解决方案,或者我可以使用任何其他加密方案?我不喜欢使用 RSA,因为它会对 NETMF 造成真正的性能影响。
解密代码。
var k = Encoding.UTF8.GetBytes("0x081632");
message = message.Replace("!", "+").Replace("*", "/"); // base64 on .netmf is different
var m = Convert.FromBase64String(message);
var xteaNet = new Key_TinyEncryptionAlgorithm(k); // class from blog
var decBytes = xteaNet.Decrypt(m, 0, m.Length, k);
var decString = Encoding.UTF8.GetString(decBytes);
这可能是一个小/大的字节序差异,但我不确定代码的哪些部分必须更改才能实现这一点。
为了测试,我尝试使用 8 长的数据和 8 长的密钥进行编码,现在两个系统上的结果是相等的。数据为“01234567”,key为“0x081632”,base64后的结果为“2BwR4Xe2sIk=".
【问题讨论】:
-
你能告诉我们:1)解密代码2)最短的
message你会发现出错了,a)消息本身,b)base64传输的数据,c)它是什么解密为。这会有所帮助。 -
在 .NetMF 上加密的任何消息都与在 .Net 上类似的加密代码不同(所以 2b 和 2c 无关紧要)。
-
我仍然认为显示由八个空格组成的消息的加密输出会有所帮助(因为根据链接代码,我们至少需要八个字节)。以及该输出解密的内容。
标签: .net encryption .net-micro-framework