gpt4 book ai didi

go - 使用此代码您如何知道是否会使用 sha256 或 sha512?

转载 作者:行者123 更新时间:2023-12-02 22:54:06 29 4
gpt4 key购买 nike

  1. 愚蠢的问题,在下面的代码中,考虑到名称是sha512.New512_256,使用的是512还是256?你如何控制你想要的?我知道我在这里错过了一些基本的东西..

  2. 此外,当我更多地关注这个时,我想知道 hmac 是否根本不是我想要的...我正在寻找创建一些小型哈希实用程序来对任何字符串输入或文件进行哈希处理作为参数给出。我也会指定用作输入参数的哈希类型...所以我希望每次在同一文件或字符串上使用相同的哈希算法时都会得到相同的哈希结果...我应该使用其他东西吗?

谢谢

import (
"crypto/hmac"
"crypto/sha512"
)

func Hash(tag string, data []byte) []byte {
h := hmac.New(sha512.New512_256, []byte(tag))
h.Write(data)
return h.Sum(nil)
}

最佳答案

SHA512 属于 SHA-2 系列。变体列于 NIST FIPS 180-4

- SHA-512/256 truncated from SHA-512 with different initial values 
- SHA-512/224 truncated from SHA-512 with different initial values
- SHA-384 truncated from SHA-512 with different initial values
- SHA-512

- SHA-224 truncated from SHA-256 with different initial values
- SHA-256

为了将这些哈希函数的域(称为域分离)与其截断版本分开,使用不同的初始值。否则,对截断版本的攻击可以被带入其他版本,v.v.

  • 第一个问题

使用sha512.New512_256,您实际上从SHA-512中选择一个哈希函数,在本例中,它是SHA-512/256 ,您可以从list中选择其他的godoc.org 通过查看他们的字符串。

  • 第二个问题

您可能需要hash而不是hmac。 HMAC 是 keyed hash-based message authentication代码,并且使用 key 进行身份验证很有用。每次控制哈希(或校验和)时,您都需要 key 。

但是,该库使用 Sum512Sum512_256 等来计算给定数据的校验和(哈希)。计算哈希值的示例代码为:

sha_512 := sha512.New()
sha_512.Write([]byte(input))
hash := base64.URLEncoding.EncodeToString(sha_512.Sum(nil))
<小时/>

截断时

乍一看,截断的想法可能看起来是 unsound 。事实上并非如此。 SHA-512 和 SHA-256 有 length extension attacks 。然而,截断的版本有 resistances, see table on wikipedia .

还应该指出的是,SHA3 系列的设计目的是抵抗长度扩展攻击。 capacity prevents攻击。

关于go - 使用此代码您如何知道是否会使用 sha256 或 sha512?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58241897/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com