ZBLOG

golang rsa 加密解密 签名验签 例子

以下是一个使用Go语言的RSA加密、解密、签名和验签的例子:

package main

import (
    "crypto/rand"
    "crypto/rsa"
    "crypto/sha256"
    "fmt"
)

func main() {
    // 生成一对RSA公私钥
    privKey, err := rsa.GenerateKey(rand.Reader, 2048)
    if err != nil {
        panic(err)
    }

    // 要加密的明文
    plainText := []byte("Hello RSA!")

    // 使用公钥加密明文
    cipherText, err := rsa.EncryptOAEP(sha256.New(), rand.Reader, &privKey.PublicKey, plainText, nil)
    if err != nil {
        panic(err)
    }

    fmt.Printf("Cipher text: %x\n", cipherText)

    // 使用私钥解密密文
    decryptedPlainText, err := rsa.DecryptOAEP(sha256.New(), rand.Reader, privKey, cipherText, nil)
    if err != nil {
        panic(err)
    }

  	fmt.Printf("Decrypted plain text: %s\n", decryptedPlainText)

  	// 签名消息
  	hashed := sha256.Sum256([]byte("message to be signed"))
  	signature, err := rsa.SignPKCS1v15(rand.Reader, privKey, crypto.SHA256, hashed[:])
  	if err != nil {
  		panic(err)
  	}

  	fmt.Printf("Signature: %x\n", signature)

  	// 验证签名
  	err = rsa.VerifyPKCS1v15(&privKey.PublicKey, crypto.SHA256, hashed[:], signature)
  	if err != nil {
  		panic(err)
  	}
}

在这个例子中,我们使用rsa.GenerateKey()函数生成一对RSA公私钥,并使用rsa.EncryptOAEP()函数使用公钥加密明文。然后,我们使用私钥解密密文并将其打印出来。

接下来,我们使用sha256.Sum256()函数计算消息的哈希值,并使用rsa.SignPKCS1v15()函数用私钥签名该哈希值。最后,我们使用rsa.VerifyPKCS1v15()函数验证签名是否正确。

注意,在生产环境中,请确保适当地保护您的RSA私钥,以防止任何人访问它。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=5034

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?