我想将String值转换为秘密KEY DES:
String sb="fffe7a50" //Example of DES key
byte []b=sb.getBytes(); //string to bytes
SecretKey key2 = new SecretKeySpec(b, 0, b.length, "DES");
但是输出完全不同:
javax.crypto.spec.SecretKeySpec@183a2
我知道“ @”后面的数字应该是DES键,但是结果为何不同?我该如何解决?
您在这里遇到了一些问题:
sb.getBytes()
不按照您的想法去做。您期望的是一个包含的字节数组{ 0xff, 0xfe, 0x7a, 0x50 }
。您得到的是一个包含的字节数组{ 0x46, 0x46, 0x46, 0x45, 0x37, 0x61, 0x35, 0x30 }
(假设您使用的是UTF-8)。
您的选择是手动初始化字节数组,如下所示:
byte[] b = new byte[]{ (byte) 0xff, (byte) 0xfe, (byte) 0x7a, (byte) 0x50 };
或正确解析字符串。我不确定您会怎么做,但是应该可行(并且可能会有一个开放源代码库为您做这件事)。
输出javax.crypto.spec.SecretKeySpec@183a2
未写出密钥的值。您所看到的只是的toString
输出SecretKeySpec
,其格式如下<fully-qualified-class-name>@<hashcode>
(有关toString()方法的详细信息,请参见此处),因此,您所看到的数字183a2
仅仅是SecretKeySpec
对象的哈希码,不能为关键-这将非常不安全。要查看持有的键的值,您需要调用SecretKeySpec#getEncoded()
方法。
请注意,仅调用System.out.println(byteArray)
将不会显示字节数组的内容-它将仅显示类名和哈希码。您将需要遍历数组并逐个打印出元素,或者需要使用另一种工具来比较两个数组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句