gpt4 book ai didi

C# RSA 使用给定的 PKCS#1 公钥加密文本

转载 作者:太空狗 更新时间:2023-10-29 23:05:57 27 4
gpt4 key购买 nike

我正在尝试编写一个函数,它接收一个要编码的字符串和一个公钥作为 PKCS#1 格式的 base64 编码字符串,并返回一个编码字符串。

    public static string EncryptRsa(string stringPublicKey, string stringDataToEncrypt)
{
byte[] publicKey = Convert.FromBase64String(stringPublicKey);

// Code to create an RSACryptoServiceProvider with the public key
// var rsa = new RSACryptoServiceProvider(??)

byte[] dataToEncrypt = Encoding.UTF8.GetBytes(stringDataToEncrypt);
var encryptedData = rsa.Encrypt(dataToEncrypt, true);
return Convert.ToBase64String(encryptedData);
}

在过去的几天里,我看到了很多关于如何使用 RSA 算法加密的问题和答案,但是没有找到关于如何在我已经拥有现有 key (特别是在 PKCS 中)时创建 RSACryptoServiceProvider 的信息# 1 格式), 只有如何生成 key 对。

例如:给定以下字符串,我将如何使用 RSA 加密来加密数据?

-----开始公钥-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUpwmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ51s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQAB

-----结束公钥-----

谢谢!!

最佳答案

您可以使用 BouncyCastle ,一个 .NET 库,允许您将 PKCS#1 格式的 key 转换为可用于加密和解密的实际 key 参数。

因为您拥有的公钥被格式化为 PKCS#1 base64 编码值。然后您可以使用 BouncyCaSTLe 将公钥解码为 ASN.1 对象,如下所示

您必须在之前从 stringPublicKey 中删除 '-----BEGIN PUBLIC KEY-----' 和 '-----END PUBLIC KEY-----'你继续。

Asn1Object obj = Asn1Object.FromByteArray(Convert.FromBase64String(stringPublicKey));

然后,按照RFC 3447 (A 1.1)中的规定:

DerSequence publicKeySequence = (DerSequence)obj;

DerBitString encodedPublicKey = (DerBitString)publicKeySequence[1];
DerSequence publicKey = (DerSequence)Asn1Object.FromByteArray(encodedPublicKey.GetBytes());

DerInteger modulus = publicKey[0];
DerInteger exponent = publicKey[1];

在这里,您拥有创建公钥所需的一切:

RsaKeyParameters keyParameters = new RsaKeyParameters(false, modulus.PositiveValue, exponent.PositiveValue);

然后,BouncyCaSTLe 提供了一种简单的方法将其转换为 .NET 兼容的 RSAParameters:

RSAParameters parameters = DotNetUtilities.ToRSAParameters(keyParameters);

然后您可以轻松地将关键参数导入 RSACryptoServiceProvider:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(parameters);

最后,进行加密:

byte[] dataToEncrypt = Encoding.UTF8.GetBytes(stringDataToEncrypt);
byte[] encryptedData = rsa.Encrypt(dataToEncrypt, true);
return Convert.ToBase64String(encryptedData);

关于C# RSA 使用给定的 PKCS#1 公钥加密文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37413837/

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