Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Sha256 - Fatal编程技术网

Java 理解SHA-256散列

Java 理解SHA-256散列,java,sha256,Java,Sha256,我在我的Java程序中使用Sha-256哈希,该程序按照行为工作 实际上,我对SHA-256使用的函数有点困惑 以下是该函数的代码: // Function for generating to Hash of the file content.. public static String generateHash( String fileContent ) { String hashtext = EMPTY_STRING; try {

我在我的Java程序中使用Sha-256哈希,该程序按照行为工作

实际上,我对SHA-256使用的函数有点困惑

以下是该函数的代码:

// Function for generating to Hash of the file content..
    public static String generateHash( String fileContent ) 
     {
        String hashtext = EMPTY_STRING;

        try {

            // SHA - 256 Message Digest..
            MessageDigest shaDigest = MessageDigest.getInstance( "SHA-256" );

            // digest() method is called 
            // to calculate message digest of the input string 
            // returned as array of byte 
            byte[] messageDigest = shaDigest.digest( fileContent.getBytes() ); 

            // Convert byte array into signum representation 
            BigInteger no = new BigInteger( 1, messageDigest ); 

            // Convert message digest into hex value 
            hashtext = no.toString( 16 ); 

            // Add preceding 0s to make it 32 bit 
            while ( hashtext.length() < 32 ) { 
                hashtext = "0" + hashtext; 
            }

        }
        catch ( Exception hashingException ) {

            System.out.println( "Exception in Hashing of Content = " + hashingException );

        }
         // return the HashText 
         return hashtext; 
     }
声明2

 hashtext = no.toString( 16 );
声明3

while ( hashtext.length() < 32 ) { 
    hashtext = "0" + hashtext;
}

while(hashtext.length()<32){
hashtext=“0”+hashtext;
}
将字节转换为正号大小表示形式。阅读更多信息

hashtext = no.toString( 16 );
BigInteger
数字转换为基数为16(十六进制)的字符串

while(hashtext.length()<32){
hashtext=“0”+hashtext;
}

前置
0
,直到hashtext的大小为32。

但是SHA-256中的长度应该是64个字符,对吗?那么为什么限制为32位呢?SHA-256有8位*32=256位初始状态大小。如果我错了,请纠正我:哈希是十六进制表示。首先我们将消息转换为字节尾数,然后将其从有符号大小更改为大整数以去除负号,然后将其转换为十六进制表示;现在while循环检查它是否少于32个字节(半个字节等于1个十六进制值意味着32个字节等于64个字符的SHA-256),然后添加零使其等于32个字节并打印哈希!如果散列的长度是256位,表示为64个十六进制数字的hashtext字符串,那么很明显在哪里修复它。把32改成64,你就完成了。不要忘记创建一个生成以“0”开头的哈希的测试用例。
BigInteger no = new BigInteger( 1, messageDigest ); 
hashtext = no.toString( 16 );
while ( hashtext.length() < 32 ) { 
    hashtext = "0" + hashtext;
}