Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取字符串的哈希值作为字符串_Java - Fatal编程技术网

Java 获取字符串的哈希值作为字符串

Java 获取字符串的哈希值作为字符串,java,Java,我在这里: String password = "123"; byte passwordByte[] = password.getBytes(); MessageDigest md = MessageDigest.getInstance("SHA-512"); byte passwortHashByte[] = md.digest(passwordByte); passwortHashByte数组只包含许多数字。我想将这些数字转换为一个字符串,其中包含作为明文的

我在这里:

    String password = "123";
    byte passwordByte[] = password.getBytes();
    MessageDigest md = MessageDigest.getInstance("SHA-512");
    byte passwortHashByte[] = md.digest(passwordByte);
passwortHashByte数组只包含许多数字。我想将这些数字转换为一个字符串,其中包含作为明文的哈希代码。
我是如何做到这一点的?

以下是我如何为我的网站做到这一点的

private static byte[] fromHex(String hex) {
   byte[] bytes = new byte[hex.length() / 2];
   for (int i = 0; i < hex.length() / 2; i++) {
      bytes[i] = (byte)(Character.digit(hex.charAt(i * 2), 16) * 16 + Character.digit(hex.charAt(i * 2 + 1), 16) - 128);
   }
   return bytes;
}

private static String toHex(byte[] bytes) {
   String hex = new String();
   for (int i = 0; i < bytes.length; i++) {
      String c = Integer.toHexString(bytes[i] + 128);
      if (c.length() == 1) c = "0" + c;
      hex = hex + c;
   }
   return hex;
}
私有静态字节[]fromHex(字符串十六进制){
byte[]bytes=新字节[hex.length()/2];
对于(int i=0;i

这将允许您将字节数组转换为十六进制字符串或从十六进制字符串转换为十六进制字符串。

以下是我为我的网站所做的

private static byte[] fromHex(String hex) {
   byte[] bytes = new byte[hex.length() / 2];
   for (int i = 0; i < hex.length() / 2; i++) {
      bytes[i] = (byte)(Character.digit(hex.charAt(i * 2), 16) * 16 + Character.digit(hex.charAt(i * 2 + 1), 16) - 128);
   }
   return bytes;
}

private static String toHex(byte[] bytes) {
   String hex = new String();
   for (int i = 0; i < bytes.length; i++) {
      String c = Integer.toHexString(bytes[i] + 128);
      if (c.length() == 1) c = "0" + c;
      hex = hex + c;
   }
   return hex;
}
私有静态字节[]fromHex(字符串十六进制){
byte[]bytes=新字节[hex.length()/2];
对于(int i=0;i

这将允许您将字节数组转换为十六进制字符串或从十六进制字符串转换为十六进制字符串。

那么,
字节passwortHashByte[]=md.digest(passwordByte)可以包含一些控制字符,这将中断字符串。如果您真的需要字符串,请考虑将PasyAsHythyBy[]编码为Base64窗体。您可以使用Apache Commons编解码器制作base64表单。

嗯,
字节passworthshbyte[]=md.digest(passwordByte)可以包含一些控制字符,这将中断字符串。如果您真的需要字符串,请考虑将PasyAsHythyBy[]编码为Base64窗体。您可以使用Apache Commons编解码器制作base64表单

我想将这些数字转换为一个字符串,其中包含作为明文的哈希代码

散列不是纯文本。它是二进制数据-任意字节。它不像MP3文件那样是纯文本

您需要确定二进制数据要使用什么文本表示。这反过来又取决于您想将数据用于什么目的。为了便于诊断,我建议使用纯ASCII表示——可能是base64或hex。如果需要轻松查看单个字节,十六进制更容易读取,但base64更紧凑

还需要注意的是,MD5并不是一种特别好的密码散列方式。。。看起来你连盐都没腌。对于一个永远不会发布到外部世界的演示应用程序来说,它可能已经足够好了,但是你应该真正研究更安全的方法。请参阅以获取介绍,最好能找到一本关于编写安全代码的书

我想将这些数字转换为一个字符串,其中包含作为明文的哈希代码

散列不是纯文本。它是二进制数据-任意字节。它不像MP3文件那样是纯文本

您需要确定二进制数据要使用什么文本表示。这反过来又取决于您想将数据用于什么目的。为了便于诊断,我建议使用纯ASCII表示——可能是base64或hex。如果需要轻松查看单个字节,十六进制更容易读取,但base64更紧凑


还需要注意的是,MD5并不是一种特别好的密码散列方式。。。看起来你连盐都没腌。对于一个永远不会发布到外部世界的演示应用程序来说,它可能已经足够好了,但是你应该真正研究更安全的方法。请参阅以获取介绍,最好能找到一本关于编写安全代码的书。

string s=“”;对于(int i=0;istring s=“”;对于(int i=0;i