Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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
doFinal函数在java中创建HMac时做什么_Java_Hmac - Fatal编程技术网

doFinal函数在java中创建HMac时做什么

doFinal函数在java中创建HMac时做什么,java,hmac,Java,Hmac,我有一个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);

我有一个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文档():

  • byte[]doFinal()
    完成MAC操作

  • byte[]doFinal(byte[]input)
    处理给定的字节数组并完成MAC操作


想想,当你拥有大量数据时,你会:

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文档():

  • byte[]doFinal()
    完成MAC操作

  • byte[]doFinal(byte[]input)
    处理给定的字节数组并完成MAC操作


您只能使用
Mac
对象一次,因此钥匙是否复位无关紧要。您的问题具体是什么?我的问题是doFinal方法在hmac实例上的用途是什么?您只使用
Mac
对象一次,因此键是否重置并不重要。您的问题具体是什么?我的问题是doFinal方法在hmac实例上的用途是什么?