当前位置: 首页 > 知识库问答 >
问题:

如何从生成PBKDF2密码的字节数组中获取字符串

白宏义
2023-03-14

我从这里使用解决方案

public static byte[] getEncryptedPassword(String password, byte[] salt,  int iterations,  int derivedKeyLength) throws NoSuchAlgorithmException, InvalidKeySpecException {
    KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, iterations, derivedKeyLength * 8);
    SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
    return f.generateSecret(spec).getEncoded();
}

问题是当我这样做时:

System.out.println(new String(getEncryptedPassword(p,s,i,l)));

我得到一个非常奇怪的字符串,类似于:,但我想要一个可以保存在DB中的普通字符串。我错在哪里?

共有1个答案

梁兴文
2023-03-14

如果要将二进制数据(如byte[])转换为字符串,则通常将其编码为十六进制或Base64格式。Base64比十六进制小,因此我建议您使用这个。

对于Base64,您可以使用Java.util.Base64,因为Java 8:

string base64encoded=base64.getEncoder().encodeToString(getEncryptedPassword(p,s,i,l));

对于hex,Java不包含必要的代码。例如,您可以使用Apache common codec中的十六进制编码:

字符串hexEncoded=hex.encodehexstring(getEncryptedPassword(p,s,i,l));

 类似资料:
  • 我有一个字符串,它包含字节数组的元素,比如“[B@42B19E58”,我必须将它转换回字节数组。 有人能给我一个这样做的方法吗? 在这里,我不必将一个字符串转换为字节数组。我已经有字节数组元素在字符串中,我只需要把它们放回数组。

  • 问题内容: 给定任意实例,包括运行时生成的实例(磁盘上没有文件),是否有任何方法获取类字节? 问题答案: 通常,这是不可能的。在加载类时,JVM会解析其字节码并将其转换为内部表示形式。此后,JVM可以随意忘记原始字节码,这就是HotSpot JVM真正发生的情况。 但是,对于某些黑客,可以检查内部类表示并将其转换回有效的类文件(尽管它将与原始字节码不同)。在HotSpot JVM中,该过程用于重新

  • 问题内容: 首先,对英语不好对不起。 好吧,我想从torrent文件中读取散列信息。目前,我正在使用https://github.com/hyPiRion/java- bencode 这个bencode库来解码信息,但是我的问题是当我想将字符串转换为字节数组时。种子文件使用UTF-8编码。但是如果我这样做 很好。任何真正有用的东西。 另一方面,为了比较或尝试获取字符串,而不是获取字节,我已经阅读了

  • 我正在尝试从ODT模板文件生成一个PDF,其中包含我需要填充的字段。 我想获得这个ODT模板的字节数组,它存在于我的项目的根文件夹中。我的应用程序是以这样一种方式提供字节数组来生成PDF。

  • 问题内容: 我有一个String变量(基本上是一个英语句子,带有未指定数量的数字),我想将所有数字提取到一个整数数组中。我想知道是否有使用正则表达式的快速解决方案? 我使用了Sean的解决方案,并对其进行了一些更改: 问题答案: …打印和。 -?匹配前导负号-可选。 d匹配一个数字,但是我们需要像Java String中那样编写。因此, d +匹配1个或多个数字。