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

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

}


12345678_0001
浏览 240回答 1
1回答

蓝山帝景

如果您想加密大于密钥大小的内容,那么您可以简单地使用混合加密。您首先使用随机 AES 密钥加密(或包装,如果特定包装操作可用)私钥的编码,例如使用 AES-CBC 或 AES-CTR(具有全零 IV)。然后,您使用私钥对该 AES 密钥进行加密。密文由加密的 AES 密钥和后面的加密数据组成 - 在本例中为 RSA 私钥。但请注意,私钥实际上应该由一个实体管理。称为私钥并不是无缘无故的。分发私钥通常被认为是不好的密钥管理实践。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go