为了账号安全,请及时绑定邮箱和手机立即绑定

使用 RSA-2048 服务器公钥加密客户端私钥

使用 RSA-2048 服务器公钥加密客户端私钥

Go
12345678_0001 2023-07-04 17:08:31
我需要使用 RSA-2048 服务器公钥加密客户端私钥。我知道私钥显然比公钥长,我不确定这是否可能......但我看到类似的任务是在Python中完成的,所以我想知道你的意见。/* main */clientPrivateKey, _ := generateRsaPair(2048)_, serverPublicKey := generateRsaPair(2048)clientPrivateKeyAsByte := privateKeyToBytes(clientPrivateKey)encryptWithPublicKey(clientPrivateKeyAsByte, serverPublicKey) 致命错误 crypto/rsa:消息对于 RSA 公钥大小来说太长/* Functions */func generateRsaPair(bits int) (*rsa.PrivateKey, *rsa.PublicKey) {    privkey, err := rsa.GenerateKey(rand.Reader, bits)    if err != nil {        log.Error(err)    }    return privkey, &privkey.PublicKey}func encryptWithPublicKey(msg []byte, pub *rsa.PublicKey) []byte {    hash := sha512.New()    ciphertext, err := rsa.EncryptOAEP(hash, rand.Reader, pub, msg, nil)    checkError(err)    return ciphertext}func privateKeyToBytes(priv *rsa.PrivateKey) []byte {    privBytes := pem.EncodeToMemory(        &pem.Block{            Type:  "RSA PRIVATE KEY",            Bytes: x509.MarshalPKCS1PrivateKey(priv),        },    )    return privBytes}
查看完整描述

1 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

如果您想加密大于密钥大小的内容,那么您可以简单地使用混合加密。您首先使用随机 AES 密钥加密(或包装,如果特定包装操作可用)私钥的编码,例如使用 AES-CBC 或 AES-CTR(具有全零 IV)。然后,您使用私钥对该 AES 密钥进行加密。密文由加密的 AES 密钥和后面的加密数据组成 - 在本例中为 RSA 私钥。

但请注意,私钥实际上应该由一个实体管理。称为私钥并不是无缘无故的。分发私钥通常被认为是不好的密钥管理实践。


查看完整回答
反对 回复 2023-07-04
  • 1 回答
  • 0 关注
  • 220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信