2014-06-17 38 views
0

我之前并不知道MessageDigest这个类。我现在试图理解一段代码,文档对我没有多大帮助。Message Digest java

MessageDigest digest = Crypto.sha256(); 

digest.update(last.getSign()); 
byte[] SignHash = digest.digest(publicKey); 

根据Java文档:使用给定byte[]

“消化”

“更新”更新此MessageDigest执行最后的更新,然后计算并返回最终散列这个MessageDigest的值。

问题1:“使用给定字节[]更新”的真正含义是什么?

问题2:“摘要”执行的最终更新是什么?

以上是否意味着SignHash=sha256(last.getSign() concat(某些公钥的填充))?

回答

2

想象MessageDigest类,就好像更新它实际上将更多字节附加到内部缓冲区一样。现在,一旦完成,您可以使用摘要方法创建附加到缓冲区的所有字节的散列。

的命名似乎有点怪(我当然认为“对appendBytes”和“createHash” /“createDigest”会更好),但想想消息摘要的实例,其内部状态你更新有更多的字节,直到您最终生成摘要

+0

因此,使用update(last.getSign()),Sign的字节会被附加到内部缓冲区中,所以很好。问题1明确。摘要输入参数的含义是什么?例如,在同一个对象上调用摘要()和摘要(字节[])可能有什么区别? – Paramar

+1

第一个变体完成散列计算,第二个变体对给定字节进行最后一次更新,然后完成散列计算(快捷方式)。 – eitanfar