当前位置: 首页 > 面试题库 >

字节到字符串,反之亦然

羊舌诚
2023-03-14
问题内容

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

问题答案:

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

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

关于将字节[]作为字符串存储在数据库中的实际问题,最好的选择是对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]);
    }

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



 类似资料:
  • 问题内容: 我必须在Android中将字节数组转换为字符串,但是我的字节数组包含负值。 如果我再次将该字符串转换为字节数组,则得到的值与原始字节数组值不同。 我该怎么做才能正确转换?我用于执行转换的代码如下: 我陷入了这个问题。 问题答案: 你的字节数组必须具有某种编码。如果你使用负值,则编码不能为ASCII。一旦弄清楚了,就可以使用以下方法将一组字节转换为字符串: 你可以使用许多编码,请查看Su

  • 问题内容: 我将如何使用python将IP地址转换为十进制数字,反之亦然? 例如,对于,我想使用易于存储在数据库中的十进制或二进制形式,然后检索它。 问题答案: 将IP字符串转换为长整数: 另一种方式:

  • 问题内容: 我正在生成密钥,需要将其存储在数据库中,因此我将其转换为字符串,但是要从字符串中获取密钥。有哪些可能的方法可以做到这一点? 我的代码是 如何从字符串取回密钥? 问题答案: 您可以将转换为字节数组(),然后Base64将其编码为。要转换回a ,Base64 会对String进行解码,并在a中使用它来重建您的原始字符串。 对于Java 8 字符串的SecretKey: 字符串到Secret

  • 问题内容: 我正在尝试将short转换为2个字节…然后从这2个字节尝试获取相同的short值。为此,我编写了以下代码: 对于700(oldshort)的值,newhosrt为444。经过一些测试,它看起来像\ t。此代码仅适用于某些值。就像…如果oldshort = 50,那么它将正常工作..但是,如果它是-200或大于127(我认为)的值,它将不起作用。我想带符号的字节,二进制补码值等等都有问题

  • 问题内容: 有没有办法将netty ByteBuf转换为String,反之亦然? 问题答案: 您可以使用转换为字符串。 您可以使用和转换为ByteBuf。

  • 问题内容: 我目前正在研究一种将键转换为字符串,反之亦然的方法。它适用于公钥转换,并将私钥转换为String。由于某些原因,同一代码不会将String转换回私钥,我只是无法弄清楚。 转换器代码为: 我正在使用的驱动程序代码是: 运行此命令时,我得到了不合适的密钥说明,有人可以为此指出正确的方向吗?控制台输出为: 我知道我不应该使用sun.misc。*库,我们正在研究Apache版本,但仍然想弄清楚