将字符串转换为密钥

为了我

我想将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键,但是结果为何不同?我该如何解决?

他们

您在这里遇到了一些问题:

  1. 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 };
    

    或正确解析字符串。我不确定您会怎么做,但是应该可行(并且可能会有一个开放源代码库为您做这件事)。

  2. 输出javax.crypto.spec.SecretKeySpec@183a2未写出密钥的值。您所看到的只是的toString输出SecretKeySpec,其格式如下<fully-qualified-class-name>@<hashcode>有关toString()方法的详细信息,请参见此处),因此,您所看到的数字183a2仅仅是SecretKeySpec对象的哈希码,不能为关键-这将非常不安全。要查看持有的键的值,您需要调用SecretKeySpec#getEncoded()方法。

    请注意,仅调用System.out.println(byteArray)将不会显示字节数组的内容-它将仅显示类名和哈希码。您将需要遍历数组并逐个打印出元素,或者需要使用另一种工具来比较两个数组。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JS数组-将字符串转换为密钥

来自分类Dev

将RSA pem密钥字符串转换为der字节[]

来自分类Dev

将RSA pem密钥字符串转换为der字节[]

来自分类Dev

将NDB urlsafe密钥字符串转换为googledatastore.Key

来自分类Dev

python将RSA密钥(PEM格式)转换为十六进制字符串

来自分类Dev

将充气城堡 aes 密钥转换为 UTF-8 字符串

来自分类Dev

reactjs:如何将 twitters 密钥 + 秘密字符串转换为 base64

来自分类Dev

SQL Server:将日期时间转换为字符串而不丢失密钥

来自分类Dev

将字符串转换为Uri字符串

来自分类Dev

将字符串转换为字节字符串

来自分类Dev

将字符串转换为整数

来自分类Dev

将Clob转换为字符串

来自分类Dev

将字符串转换为datenum

来自分类Dev

将字符串转换为映射

来自分类Dev

将字符串转换为LatLng

来自分类Dev

将字符串转换为小写

来自分类Dev

将字符串转换为字典

来自分类Dev

将字符串转换为地图?

来自分类Dev

将字符串转换为T

来自分类Dev

将字符串转换为日期

来自分类Dev

将函数转换为字符串

来自分类Dev

将空字符串转换为“”

来自分类Dev

将字符串转换为long

来自分类Dev

将字符串转换为哈希

来自分类Dev

将DateTime转换为字符串

来自分类Dev

将字符串转换为JsonArray

来自分类Dev

将字符串转换为JSON

来自分类Dev

将字符串转换为列名

来自分类Dev

将字符串转换为日期