Java 理解SHA-256散列
我在我的Java程序中使用Sha-256哈希,该程序按照行为工作 实际上,我对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 {
// 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;
}