这是用于AES加密的密钥的十六进制格式

00010203050607080A0B0C0D0F101112

我可以从中生成原始的SecretKey格式或字节数组吗?

如果是这样的话?

有帮助吗?

解决方案

您可以使用Apache Commons Codec执行十六进制解码,

http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Hex.html#decodeHex(炭[])

如果您不想使用任何库,也可以这样做,

byte[] bytes = new BigInteger("7F" + str, 16).toByteArray();
SecretKeySpec key = new SecretKeySpec(bytes, 1, bytes.length-1, "AES");

你必须添加一个额外的字节0x7F,以防止BigInteger剥离前导零或添加有符号字节。

其他提示

SecretKey 是一个界面。实施的是什么类型? J2SE有两个实现类, KerberosKey SecretKeySpec ,两者都有一个带有字节数组作为参数的构造函数。

最初的SecretKey格式是什么?
您是否知道 byte [] 包含从-128到127的有符号字节? 如果你试过这件事会不会受到伤害:

byte[] key = {
  0x00,0x01,0x02,0x03,0x05,0x06,0x07,0x08,
  0x0A,0x0B,0x0C,0x0D,0x0F,0x10,0x11,0x12
};

注意:如果您有像0x80 - 0xFF这样的值,则需要将它们转换为(字节)0x80 - (字节)0xFF,以避免出现关于范围的警告。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top