Java和C#.Net之间的AES加密问题

时间:2011-01-18 19:14:54

标签: java .net interop

我在网上和这个论坛上看过无数的例子,我找不到答案。

我有一个成功加密和解密数据的Java客户端。 我有一个成功加密和解密数据的.Net客户端。

我将.Net版本作为Web服务。我加密了Java客户端中的一些数据并将其发送到.Net Web服务。我明白了: - Padding无效,无法删除.--

所以我确保我使用相同的编码,IV,Key,一切。我能想到的唯一想法是我正在向服务发送一个字节数组。当我从java客户端吐出数组并将其与到达服务的数组进行比较时,正如您所期望的那样,服务中的数组是不同的,因为它被转换为无符号字节数组。以下是两个数组:

[ - 47 17 -27 -32 -101 54 -93 47 85 -83 -31 -102 53 -125 115 -14]

[209 17 229 224 155 54 163 47 85 173 225 154 53 131 115 242]

所以我猜这是造成这个问题的原因。我怎么能绕过这个? Rijndael实现都不接受带符号的字节数组。我缺少转换吗?

感谢您的帮助。我已经准备好通过我的屁股挖出我的大脑了。 ST

编辑 - 在查看代码后,我发现了我的错误。我不得不复制一些数据并从错误的索引开始。 Arrrgggghhhhhhh!

抱歉有问题。

1 个答案:

答案 0 :(得分:1)

在这两种情况下你都有相同的实际数据 - 只是Java不支持无符号字节。如果每个平台都可以解密自己的数据,并且您获得了两个平台生成的相同数据,那么很难看出它们如何分辨出来。

我的猜测是你在.NET端以不同的方式做某些事情。我们需要查看代码才能确定。

如果您尝试解密可以解密数据的.NET客户端中完全相同的数据,会发生什么?我建议你创建一个小型控制台应用程序,它只是试图解密一个文件。让您的.NET服务器保存它给文件的任何数据,然后尝试正常解密它。然后在该文件上运行控制台应用程序。在此处报告结果,我们将尽力帮助您理解它们。