微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

字节到字符串,反之亦然

如何解决字节到字符串,反之亦然

在上面编写代码时,先打印aesKey,然后b实际打印的是toString数组对象方法输出,这只是认的ObjecttoString方法。所以我看不出您怎么能期望它们是相同的。

如果您确实要检查它们是否相同,则应逐字节比较它们。

关于将字节[]作为字符串存储在数据库中的实际问题,最好的选择是对Base64进行编码。我建议为此使用Apache Commons Codec库。请参阅用户指南

编辑:

使用您所引用的BASE64Encode和BASE64Decoder,代码如下所示:

    SecureRandom ranGen = new SecureRandom();
    byte[] aesKey = new byte[16]; // 16 bytes = 128 bits
    ranGen.nextBytes(aesKey);
    String a = new BASE64Encoder().encode(aesKey);

    System.out.println(a);

    byte[] b = new BASE64Decoder().decodeBuffer(a);
    System.out.println(new BASE64Encoder().encode(b));

    for (int i = 0; i < aesKey.length; i++) {
        System.out.println(aesKey[i] + " " + b[i]);
    }

在这里,我还逐个遍历了字节,以表明它们确实相等。

解决方法

我需要转换一个随机生成的盐值并将其存储在数据库中。为了将其存储在数据库中,我将其转换为字符串。然后,为了检索原始值,我将其转换回字节。但是两个值都不匹配。我已经尝试过“
UTF-8”,“ UTF-16”,BASE64Encoder。

SecureRandom ranGen = new SecureRandom();
byte[] aesKey = new byte[16]; // 16 bytes = 128 bits
ranGen.nextBytes(aesKey);   
System.out.println(aesKey);

String a=new String(aesKey,"UTF-16");
byte[] b=new byte[16];
b=a.getBytes("UTF-16");
System.out.println(b);

上面代码的输出(执行两次):

[B@11563ff
[B@1581593

[B@170888e
[B@11563ff

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。