登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-03-17 21:45:27 477浏览 收藏

当加密客户端私钥时,可以使用 RSA-2048 服务器公钥,但需要注意私钥长度通常比公钥长。如果需要加密大于密钥大小的内容,可以使用混合加密,首先使用随机 AES 密钥对私钥编码进行加密,再使用私钥对 AES 密钥进行加密。这样,密文由加密的 AES 密钥和加密数据组成,保证了私钥的安全性。

问题内容

我需要使用 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
}

解决方案


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

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

今天关于《加密客户端私钥时使用 RSA-2048 服务器公钥》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>