求帮忙看看这段python使用rsa加密的代码,怎么用go语言实现

需要在go程序中实现下面python代码实现的rsa加密功能,

2 key = rsa.PublicKey(int, int) #创建公钥,参数是两个指定的int型
4 passwd = rsa.encrypt(message, key) #加密,message是需要加密的一个string类型
5 passwd = binascii.b2a_hex(passwd) #将加密信息转换为16进制。

查找了一下go标准库,发现了两个方法:

  • func GenerateKey(random io.Reader, bits int) (priv *PrivateKey, err error)
  • func GenerateMultiPrimeKey(random io.Reader, nprimes int, bits int) (priv *PrivateKey, err error)

但是好像这两个方法传进去的有一个参数是rand.Reader一个随机数类型,不符合要求,不知道怎么实现了,麻烦大神指点一下,谢谢。

阅读 4k
1 个回答
package main

import (
    "crypto/rand"
    "crypto/rsa"
    "crypto/sha1"
    "encoding/hex"
    "fmt"
)

func main() {
    // 生成私钥
    k, err := rsa.GenerateKey(rand.Reader, 2048)
    CheckErr(err)
    raw := "123"

    PKCS1v15(raw, k)

    OAEP(raw, k)
}

func PKCS1v15(raw string, k *rsa.PrivateKey) {
    // 加密数据
    encData, err := rsa.EncryptPKCS1v15(rand.Reader, &k.PublicKey, []byte(raw))
    CheckErr(err)

    // 将加密信息转换为16进制
    fmt.Println(hex.EncodeToString(encData))

    // 解密数据
    decData, err := rsa.DecryptPKCS1v15(rand.Reader, k, encData)
    CheckErr(err)

    fmt.Println(string(decData))
}

func OAEP(raw string, k *rsa.PrivateKey) {
    // 加密数据
    encData, err := rsa.EncryptOAEP(sha1.New(), rand.Reader, &k.PublicKey, []byte(raw), nil)
    CheckErr(err)

    // 将加密信息转换为16进制
    fmt.Println(hex.EncodeToString(encData))

    // 解密数据
    decData, err := rsa.DecryptOAEP(sha1.New(), rand.Reader, k, encData, nil)
    CheckErr(err)

    fmt.Println(string(decData))
}

func CheckErr(err error) {
    if err != nil {
        panic(err)
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题