在 java 中创建 HMac 时 doFinal 函数做了什么
What does doFinal function do in creation of HMac in java
我在java中有一个hmac生成方法,定义如下:-
String encStr = "POST\n" + timestamp + "\n" + message;
Mac sha256_HMAC = Mac.getInstance("HmacSHA1");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA1");
sha256_HMAC.init(secret_key);
String hash = Base64.getEncoder().encodeToString(sha256_HMAC.doFinal(encStr.getBytes()));
return hash;
其中 secret 和 function name 是我的私钥和名称。
我只想知道 doFinal 函数的作用,因为 oracle 文档说它正在重置密钥,但它们也有明确的重置方法
想想当你的数据量很大的时候,你会做:
sha256_HMAC.init()
while(read more data into buffer) {
sha256_HMAC.upadte(buffer)
}
result = sha256_HMAC.doFinal()
所以,doFinal(buffer)
做的是:
do `update(buffer)`
calculate the cryptography result
reset the HmacSHA1 instance
return the cryptography result
doFinal
表示这是计算结果的最后一步,没有更多数据了。
来自 Java 文档 (https://docs.oracle.com/javase/8/docs/api/javax/crypto/Mac.html):
byte[] doFinal()
完成 MAC 操作。
byte[] doFinal(byte[] input)
处理给定的字节数组并完成 MAC 操作。
我在java中有一个hmac生成方法,定义如下:-
String encStr = "POST\n" + timestamp + "\n" + message;
Mac sha256_HMAC = Mac.getInstance("HmacSHA1");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA1");
sha256_HMAC.init(secret_key);
String hash = Base64.getEncoder().encodeToString(sha256_HMAC.doFinal(encStr.getBytes()));
return hash;
其中 secret 和 function name 是我的私钥和名称。 我只想知道 doFinal 函数的作用,因为 oracle 文档说它正在重置密钥,但它们也有明确的重置方法
想想当你的数据量很大的时候,你会做:
sha256_HMAC.init()
while(read more data into buffer) {
sha256_HMAC.upadte(buffer)
}
result = sha256_HMAC.doFinal()
所以,doFinal(buffer)
做的是:
do `update(buffer)`
calculate the cryptography result
reset the HmacSHA1 instance
return the cryptography result
doFinal
表示这是计算结果的最后一步,没有更多数据了。
来自 Java 文档 (https://docs.oracle.com/javase/8/docs/api/javax/crypto/Mac.html):
byte[] doFinal()
完成 MAC 操作。byte[] doFinal(byte[] input)
处理给定的字节数组并完成 MAC 操作。