gpt4 book ai didi

c# - 使用 RSA 编码字符串

转载 作者:行者123 更新时间:2023-11-30 22:36:05 26 4
gpt4 key购买 nike

我正在使用一个 API,该 API 指定某些文本必须使用“RSA/ECB/PKCS1Padding”编码传递。公钥以 .PEM 格式提供;我认为我已经成功地将它转换为 XML 格式,我现在正在使用这个 C# 代码:

    RSACryptoServiceProvider rsa1 = new RSACryptoServiceProvider();
rsa1.FromXmlString(testpublickey);

System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] textBytes = encoding.GetBytes(plainstring);
byte[] encryptedOutput = rsa1.Encrypt(textBytes, false);
string outputB64 = Convert.ToBase64String(encryptedOutput);
Console.WriteLine(outputB64);
return outputB64;

但是,返回的字符串与预期的不匹配 - API 给出了以下 OpenSSL 命令作为示例:

openssl rsautl -encrypt -in PIN.txt -inkey public_key_for_pin.pem -pubin | openssl base64 > PIN.base64

OpenSSL 的输出与我的代码的输出不匹配。任何人都可以看到我的代码有什么问题吗?我是否需要指定特定的填充,或者我是否可能在从 PEM 到 XML 的转换过程中破坏了公钥文件?

最佳答案

我这样做是为了用公钥加密数据。

首先将 PEM 数据加载到 X509Certificate2 类中,它具有您可以使用的 Import 方法。

然后我使用下面的代码:

using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Pkcs;
using System.Security.Cryptography;

public static string EncryptString(string clearText, X509Certificate2 cert)
{
try
{
byte[] encodedCypher = EncryptData(Encoding.UTF8.GetBytes(clearText), cert);
string cipherText = Convert.ToBase64String(encodedCypher);

return cipherText;
}
catch (Exception ex)
{
throw new EncryptionException("Could not Encrypt String. See InnerException for details.", ex);
}
}

private static byte[] EncryptData(byte[] clearText, X509Certificate2 cert)
{
ContentInfo payloadInfo = new ContentInfo(clearText);
EnvelopedCms payloadEnvelope = new EnvelopedCms(payloadInfo);
CmsRecipient certHandle = new CmsRecipient(cert);
payloadEnvelope.Encrypt(certHandle);
return payloadEnvelope.Encode();
}

关于c# - 使用 RSA 编码字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7167449/

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