golang标准库-crypto/hmac(加密哈希算法)

HMAC算法是一种加密的hash算法,它结合了hash算法(如SHA256或MD5)和一个密钥key,通过在hash计算过程中混入密钥key,产生与原hash算法相同位数的hash值。HMAC算法可以被视为加盐的hash算法,其加密原理是在密文中混入第三方值,以增强安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hmac算法是加密的hash算法,它需要一个hash算法(比如sha256获取md5等)和一个密匙key,在hash计算的过程中将密匙key混入,产生一个和原来hash算法相同位数的hash值。
在大多数情况下,我们甚至可以将hamc算法看做是加盐的hash算法(加盐是将一个随机字符串放在需要加密的密文前面或者后面,然后对这个拼接后的密文进行加密得到hash值)。
但它们的加密原理肯定不一样,虽然达到的效果是一样的,都是对密文混入一个第三方值,然后得到一个hash值原文搬至:https://itpika.com/2019/06/28/go/library-crypto-hmac/

 

 

EIP-2771,也称为ERC-2771,是关于去中心化应用程序(DApp)中的安全代币标准。在Go语言中实现EIP-2771签名通常涉及到使用加密算法来签署交易,确保其来源的真实性。以下是一个简单的示例,展示如何使用`secp256k1`库来进行ECDSA(椭圆曲线数字签名算法)签名,这是Ethereum中最常用的签名方案: ```go package main import ( "crypto/ecdsa" "crypto/hmac" "crypto/sha256" "encoding/hex" ) type EIP2771Signer struct { privateKey *ecdsa.PrivateKey } func (s *EIP2771Signer) Sign(message []byte) ([]byte, error) { hashedMessage := sha256.Sum256(message) signatureR, signatureS, err := ecdsa.Sign(rand.Reader, s.privateKey, hashedMessage[:]) if err != nil { return nil, err } // 将Signature转换为字节并追加0x01前缀(因为EIP-2771使用little-endian编码) rBytes := make([]byte, len(signatureR)) for i, b := range signatureR { rBytes[i] = byte(b) } sBytes := make([]byte, len(signatureS)) for i, b := range signatureS { sBytes[i] = byte(b) } return append(rBytes, sBytes...), nil } func main() { // 创建私钥(这里仅作示例,实际应用应妥善保管私钥) priv, _ := ecdsa.GenerateKey(secp256k1Curve, rand.Reader) .signer := &EIP2771Signer{privateKey: priv} message := []byte("Your message here") signature, err := signer.Sign(message) if err != nil { panic(err) } // 现在你可以将signature用于发送到区块链 encodedSignature := hex.EncodeToString(signature) println("Encoded Signature:", encodedSignature) } ``` 这个例子假设你已经有一个随机数生成器`rand.Reader`和`secp256k1Curve`,这通常是`github.com/btcsuite/btcd/math/ecdsa`包的一部分。记得在实际项目中,你需要处理好密钥的安全性和消息的完整性和哈希计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值