我需要使用Java的SecretKeySpec()
,其数字大于127。
如果我执行以下操作:
new byte[] { (byte)0xD9, (byte)0xDF, (byte)0x85 }
数字转换为字节,它们将为负数。
当然我可以&
使用0xFF
将它们保存在short
数组中并保存它们的值,但之后我将无法将此数组传递给{{ 1}},因为它只接收SecretKeySpec()
数组。
有什么想法吗?
答案 0 :(得分:0)
这实际上只是一个渲染问题。 SecretKeySpec
使用字节数组,构造字节数组没有问题。唯一的问题是如何将大(> 127)个整数表示为java字节,或者等效地将'217'表示为字节。
您可以使用您想要的任何映射,但Java有一个非常自然的选择 - 将整数转换为字节,使用强制转换,(byte)i
,然后转换回来,使用Byte.toUnsignedInt(b)
。如您所见,这会恢复原始值:
public static void main( String[] args )
{
for (int count = 0; count<256; count++){
System.out.println(count+" : "+(byte)count+" => "+Byte.toUnsignedInt((byte)count));
}
}
答案 1 :(得分:0)
似乎没有必要这样做。
我在Java中将签名值写入byte[]
数组,并在C#中将它们作为无符号读取(例如,Java#{1}}在C#中读取-16
。但解密仍然有效。这似乎是在Rijndael算法中处理的。