0

我正在为 Android 开发一个应用程序。在这个应用程序中,您必须使用 Rijndael 加密/解密算法。

要使用此算法,我需要安装 IV。在这种情况下是一个字节数组。到目前为止,一切都很好。

问题是我必须使用来自用 C# 编写的 Web 服务的相同 IV。

C#是这样的:

byte[] bytIV = { 121, 241, 10, 1, 132, 74, 11, 39, 255, 91, 45, 78, 14, 211, 22, 62 };

当我尝试在 Java 中做同样的事情时,会发生错误,我建议添加几个数字。是什么让代码这样:

byte[] bytIV = { 121, (byte) 241, 10, 1, (byte) 132, 74, 11, 39, (byte) 255, 91, 45, 78, 14, (byte) 211, 22, 62 };

仍然没有工作。

有人对我的工作有什么建议吗?

谢谢!


在我在这里使用的示例中,我使用了 (cast) 而不是 (byte)。示例已更正。注意:我的代码中有(演员)。在代码中是(字节)。

4

3 回答 3

0

在 Java 中,一个字节的范围可以在 -128 到 127 之间。任何大于 128 或小于 -127 的数字都不能放入字节中,这就是它要求强制转换的原因。在 Java 中,您添加这样的转换 (int) 或 (double) 会将数字分别转换为 int 或 double。要解决您的问题,您必须将数组更改为 short 或 int 数组而不是字节数组。然后删除声明中的演员表。下面的任何一个都应该适合你。

int[] bytIV = { 121, 241, 10, 1, 132, 74, 11, 39, 255, 
                             91, 45, 78, 14, 211, 22, 62 };

或者

short[] bytIV = { 121, 241, 10, 1, 132, 74, 11, 39, 255, 
                             91, 45, 78, 14, 211, 22, 62 };
于 2012-07-23T14:54:13.463 回答
0

字节是 8 位有符号的,从 -128 到 127。因此,转换 241 将给出 -15,这与 C# 中无符号字节的 241 位相同。我没有看到问题。但是转换为 byte 是 with (byte)241,而不是(cast)241

于 2012-07-23T14:48:36.097 回答
0

字节是 8 位有符号的。您正在设置大于该值的数组值。以 241 为例。这就是为什么您需要添加演员表,并且进行简单测试的结果是:

byte b2 = (byte) 241;           
System.out.println("" + b2);

输出 = -15

因此你的问题

于 2012-07-23T14:44:47.560 回答