从十六进制格式获取原始密钥

时间:2009-11-26 18:50:07

标签: java encryption encoding aes

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

00010203050607080A0B0C0D0F101112

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

如果是这样的话?

3 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:0)

SecretKey是一个界面。实施的是什么类型? J2SE有两个实现类KerberosKeySecretKeySpec,它们都有构造函数,其中一个字节数组作为参数。

答案 2 :(得分:0)

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

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

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