【发布时间】:2016-01-13 12:01:11
【问题描述】:
我需要使用 Java 的 SecretKeySpec() 和大于 127 的数字数组。
如果我执行以下操作:
new byte[] { (byte)0xD9, (byte)0xDF, (byte)0x85 }
数字被转换为字节,它们将是负数。
当然我可以用0xFF & 他们并将它们保存在short 数组中并保存它们的值,但是我将无法将此数组传递给SecretKeySpec(),因为它只接收bytes[] 数组。
有什么想法吗?
【问题讨论】:
-
如果 SecretKeySpec 需要一个字节[],那么您必须假设它正确处理 > 127 的值。你的实际问题是什么?
-
这样写:
new byte[] { 0xD9, 0xDF, 0x85 }会产生错误。它需要是这样的:new byte[] { (byte)0xD9, (byte)0xDF, (byte)0x85 }。如果是这样,则将数字转换为带符号的数字。所以我已经传递了一个错误的数组... -
你不能有一个等于 128 的字节,因为没有无符号字节。所以 SecretKeySpec 必须相应地处理它。为什么说是错误的数组?
-
{ 0xD9, 0xDF, 0x85 } = {217, 223, 133},但{ (byte)0xD9, (byte)0xDF, (byte)0x85 } = {-39, -33, -123} -
应该是这样。那是什么错误造成的。如果您只想显示未签名的版本,您可以使用 Byte.toUnsignedInt。