java - 为什么 SHA-1 算法对于相同的输入值会产生不同的值?

标签 java sha sha1

这里我附上我的代码关于基于“SHA-1”算法的 Java 代码,用于手动给定的相同输入值:

import java.security.MessageDigest;    
import java.security.NoSuchAlgorithmException;    
import sun.misc.BASE64Encoder;

public class NewClass {       
 public static void main(String args[]) throws NoSuchAlgorithmException        
 {       
    MessageDigest digest = MessageDigest.getInstance("SHA-1");    
    System.out.println("Algorithm :"+digest.getAlgorithm());    
    digest.update("welcome".getBytes());    
    byte[] result = digest.digest();     
    hash = (new BASE64Encoder()).encode(result);     
    MessageDigest digest1 = MessageDigest.getInstance("SHA-1");    
    digest1.update("welcome".getBytes());    
    byte[] result1 = digest1.digest();    
    System.out.println(result);    
    System.out.println(result1);    
    String hash1 = (new BASE64Encoder()).encode(result);    
    System.out.println("Digest value"+hash);    
    System.out.println("Digest value"+hash1);       
 }

}

输出:

Algorithm :SHA-1

[B@42e816

[B@9304b1

Digest value wLE3/i15JFnyb/djzORFdKW1qwM=

Digest value wLE3/i15JFnyb/djzORFdKW1qwM=

上述算法产生相同的哈希码,但中间值不同。这是为什么?

最佳答案

[B@42e816 是您尝试在 Java 中打印数组时得到的结果。它只是打印它的内存地址,而不是内容。显然,两个不同的数组会有不同的地址。

关于java - 为什么 SHA-1 算法对于相同的输入值会产生不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10861752/

相关文章:

java - 选项卡布局实现上的 NullPointerException

git - 如何从 git log 输出中获取特定的 SHA

hash - 在实践中忽略 SHA 冲突的可能性是否安全?

git - 如何在没有 Git 的情况下将 Git SHA1 分配给文件?

java - 将 postgresql 数据库添加到 travis

java - 设计决策 : Adding new arguments to a method V/S creating an instance variable

java - 将数组中的字符串复制到字符串变量时遇到问题

git - cherry-pick 提交并保留原始 SHA 代码

python - sha1 在 go 中与在 python 和 openssl 中不同

mercurial - Mercurial 全局变更集 ID 的分配