Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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 用十六进制编码器代替SHA-256字符串生成奇怪字符串的方法_Java_String_Tostring - Fatal编程技术网

Java 用十六进制编码器代替SHA-256字符串生成奇怪字符串的方法

Java 用十六进制编码器代替SHA-256字符串生成奇怪字符串的方法,java,string,tostring,Java,String,Tostring,我是Java编程新手 我想得到一些给定字符串的sha-256散列 我得到: 㔴晥㜶晥㜶㔴㄰扡㔴晥㄰扡㌲㌲㌲㄰摣㔴㜶㌲扡扡㌲㄰㄰㌲㜶㜶晥㔴㄰ 但是期待着类似于: 074CFBAD12 BADE66C92D01142B83C8F2B24030959980151F83972F4575A43E1 这是我的密码: import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class

我是Java编程新手

我想得到一些给定字符串的sha-256散列

我得到:

㔴晥㜶晥㜶㔴㄰扡㔴晥㄰扡㌲㌲㌲㄰摣㔴㜶㌲扡扡㌲㄰㄰㌲㜶㜶晥㔴㄰

但是期待着类似于:

074CFBAD12 BADE66C92D01142B83C8F2B24030959980151F83972F4575A43E1

这是我的密码:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class HelloWorld{

    private static final char[] DIGITS;    
    static {
        char[] arrc;
        char[] arrc2 = arrc = new char[16];
        arrc2[0] = 12592;
        arrc2[1] = 13106;
        arrc2[2] = 13620;
        arrc2[3] = 14134;
        arrc2[4] = 14648;
        arrc2[5] = 25185;
        arrc2[6] = 25699;
        arrc2[7] = 26213;
        DIGITS = arrc;
    }

     public static void main(String []args){
        StringBuilder localStringBuilder = new StringBuilder();
        localStringBuilder.append(55);
        localStringBuilder.append("market-gap");
        localStringBuilder.append("marjet-gre");
        localStringBuilder.append("1");
        localStringBuilder.append("05/19/1989");
        localStringBuilder.append("6.3.0");
        localStringBuilder.append("0");
        localStringBuilder.append("");
        localStringBuilder.append("en");
        localStringBuilder.append("");
        localStringBuilder.append("00e0533117bb8707");
        String paramString1 = localStringBuilder.toString();

        String strrrr = sha256(paramString1);

        System.out.println(strrrr);
     }

     public static String encodeHex(byte[] arrby) {
        StringBuilder stringBuilder = new StringBuilder(arrby.length * 2);
        for (int i = 0; i < arrby.length; ++i) {
            stringBuilder.append(DIGITS[(arrby[i] & 240) >>> 4]);
            stringBuilder.append(DIGITS[arrby[i] & 15]);
        }
        return stringBuilder.toString();
    }
    public static String sha256(String paramString)
      {
        try
        {
          MessageDigest localMessageDigest = MessageDigest.getInstance("SHA-256");
          return encodeHex(localMessageDigest.digest(paramString.getBytes()));
        }
        catch (NoSuchAlgorithmException e)
        {
          //ThrowableExtension.printStackTrace(e);
        }
        return null;
      }
}
import java.security.MessageDigest;
导入java.security.NoSuchAlgorithmException;
公共类HelloWorld{
私有静态最终字符[]位;
静止的{
char[]arrc;
字符[]arrc2=arrc=新字符[16];
arrc2[0]=12592;
arrc2[1]=13106;
arrc2[2]=13620;
arrc2[3]=14134;
arrc2[4]=14648;
arrc2[5]=25185;
arrc2[6]=25699;
arrc2[7]=26213;
数字=arrc;
}
公共静态void main(字符串[]args){
StringBuilder localStringBuilder=新建StringBuilder();
localStringBuilder.append(55);
localStringBuilder.append(“市场缺口”);
localStringBuilder.append(“marjet gre”);
localStringBuilder.append(“1”);
localStringBuilder.append(“1989年5月19日”);
localStringBuilder.append(“6.3.0”);
localStringBuilder.append(“0”);
localStringBuilder.append(“”);
localStringBuilder.append(“en”);
localStringBuilder.append(“”);
localStringBuilder.append(“00e0533117bb8707”);
字符串paramString1=localStringBuilder.toString();
字符串strrrr=sha256(paramString1);
系统输出打印项次(strrrr);
}
公共静态字符串encodeHex(字节[]arrby){
StringBuilder StringBuilder=新StringBuilder(arrby.length*2);
对于(int i=0;i>>4]);
stringBuilder.append(数字[arrby[i]&15]);
}
返回stringBuilder.toString();
}
公共静态字符串sha256(字符串参数字符串)
{
尝试
{
MessageDigest localMessageDigest=MessageDigest.getInstance(“SHA-256”);
返回encodeHex(localMessageDigest.digest(paramString.getBytes());
}
捕获(无算法异常)
{
//ThrowableExtension.printStackTrace(e);
}
返回null;
}
}
我做错了什么


你的十六进制编码器看起来很可疑。它到底应该如何工作

您可以尝试JDK中已经存在的转换器:

public static String sha256(String paramString) {
    try {
        MessageDigest localMessageDigest = MessageDigest.getInstance("SHA-256");
        byte[] binaryDigest = localMessageDigest.digest(paramString.getBytes());
        return DatatypeConverter.printHexBinary(binaryDigest);
    } catch (NoSuchAlgorithmException e) {
        // ThrowableExtension.printStackTrace(e);
    }
    return null;
}
编辑:

好的,明白了

您的
数字
值错误。以下是一个工作版本:

public class HelloWorld {

private static final char[] DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

    public static void main(String[] args) {
        StringBuilder localStringBuilder = new StringBuilder();
        localStringBuilder.append(55);
        localStringBuilder.append("market-gap");
        localStringBuilder.append("marjet-gre");
        localStringBuilder.append("1");
        localStringBuilder.append("05/19/1989");
        localStringBuilder.append("6.3.0");
        localStringBuilder.append("0");
        localStringBuilder.append("");
        localStringBuilder.append("en");
        localStringBuilder.append("");
        localStringBuilder.append("00e0533117bb8707");
        String paramString1 = localStringBuilder.toString();

        String strrrr = sha256(paramString1);

        System.out.println(strrrr);
    }

    public static String encodeHex(byte[] arrby) {
        StringBuilder stringBuilder = new StringBuilder(arrby.length * 2);
        for (int i = 0; i < arrby.length; ++i) {
            stringBuilder.append(DIGITS[(arrby[i] & 0xF0) >>> 4]);
            stringBuilder.append(DIGITS[arrby[i] & 0x0F]);
        }
        return stringBuilder.toString();
    }

    public static String sha256(String paramString) {
        try {
            MessageDigest localMessageDigest = MessageDigest.getInstance("SHA-256");
            return encodeHex(localMessageDigest.digest(paramString.getBytes()));
        } catch (NoSuchAlgorithmException e) {
            // ThrowableExtension.printStackTrace(e);
        }
        return null;
    }

}
公共类HelloWorld{
私有静态最终字符[]位={0',1',2',3',4',5',6',7',8',9',A',B',C',D',E',F'};
公共静态void main(字符串[]args){
StringBuilder localStringBuilder=新建StringBuilder();
localStringBuilder.append(55);
localStringBuilder.append(“市场缺口”);
localStringBuilder.append(“marjet gre”);
localStringBuilder.append(“1”);
localStringBuilder.append(“1989年5月19日”);
localStringBuilder.append(“6.3.0”);
localStringBuilder.append(“0”);
localStringBuilder.append(“”);
localStringBuilder.append(“en”);
localStringBuilder.append(“”);
localStringBuilder.append(“00e0533117bb8707”);
字符串paramString1=localStringBuilder.toString();
字符串strrrr=sha256(paramString1);
系统输出打印项次(strrrr);
}
公共静态字符串encodeHex(字节[]arrby){
StringBuilder StringBuilder=新StringBuilder(arrby.length*2);
对于(int i=0;i>>4]);
追加(数字[arrby[i]&0x0F]);
}
返回stringBuilder.toString();
}
公共静态字符串sha256(字符串参数字符串){
试一试{
MessageDigest localMessageDigest=MessageDigest.getInstance(“SHA-256”);
返回encodeHex(localMessageDigest.digest(paramString.getBytes());
}捕获(无算法异常){
//ThrowableExtension.printStackTrace(e);
}
返回null;
}
}

此外,为了可读性,我将int
240
15
更改为
0xF0
0x0F

您在静态块中使用的是汉字。是的,
数字出现问题。谢谢