gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:17:22 25 4
gpt4 key购买 nike

我需要使用 RSA-2048 服务器公钥加密客户端私钥。我知道私钥明显比公钥长,我不确定这是否可能......但我看到类似的任务是在Python中完成的,所以我想知道你的意见。

/* main */

clientPrivateKey, _ := generateRsaPair(2048)
_, serverPublicKey := generateRsaPair(2048)

clientPrivateKeyAsByte := privateKeyToBytes(clientPrivateKey)

encryptWithPublicKey(clientPrivateKeyAsByte, serverPublicKey)

fatal error 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
}

最佳答案

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

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

关于go - 使用 RSA-2048 服务器公钥加密客户端私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57100727/

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