gpt4 book ai didi

c# - 如何在 RSAParameters 上设置公钥和私钥以用于 RSACryptoServiceProvider?

转载 作者:行者123 更新时间:2023-11-30 16:13:25 26 4
gpt4 key购买 nike

网上看了一些教程,生成了公钥和私钥,但是如何设置才能在C#中使用呢?这是我所拥有的:

        string publicKey = "...";
string privateKey = "....";
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] dataToEncrypt = ByteConverter.GetBytes("Data to Encrypt");
byte[] encryptedData;
byte[] decryptedData;
string decrptedStr = "";
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider()) {
RSAParameters myRSAParameters = RSA.ExportParameters(true);
myRSAParameters.Modulus = ByteConverter.GetBytes(publicKey);
myRSAParameters.Exponent = ByteConverter.GetBytes(privateKey);
encryptedData = RSAEncrypt(dataToEncrypt, myRSAParameters, false);
decryptedData = RSADecrypt(encryptedData, myRSAParameters, false);
decrptedStr = ByteConverter.GetString(decryptedData);
}

下面是我从M$网站复制的加密/解密函数:

    static public byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding) {
try {
byte[] encryptedData;
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider()) {
RSA.ImportParameters(RSAKeyInfo);
encryptedData = RSA.Encrypt(DataToEncrypt, DoOAEPPadding);
}
return encryptedData;
} catch (CryptographicException e) {
Console.WriteLine(e.Message);

return null;
}

}

static public byte[] RSADecrypt(byte[] DataToDecrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding) {
try {
byte[] decryptedData;
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider()) {
RSA.ImportParameters(RSAKeyInfo);
decryptedData = RSA.Decrypt(DataToDecrypt, DoOAEPPadding);
}
return decryptedData;
} catch (CryptographicException e) {
Console.WriteLine(e.ToString());

return null;
}

}

最佳答案

这里有很多问题。您没有指明您的公钥/私钥的编码,但我可以肯定,无论编码如何,仅通过 ByteConverter.GetBytes(...) 获取与 Unicode 编码字符串等效的字节是行不通的。这些应该是数字 RSA 参数的字节数组等价物。

第二个问题是您对“公钥”和“私钥”的解释。公钥不是(只是)模数,私钥不是指数。公钥由模数(公共(public))指数(Exponent 类型的 RSAParameters 属性,私钥是模数和私有(private)指数( D RSAParameters类型的属性)。但是,为了解密,导入到RSAParameters中的RSACryptoServiceProvider还必须具有DPDQInverseQP679156791567915679156791567915679156791567915679915 properties( ).

同样,在不知道您的公钥/私钥中使用的编码的情况下,我无法提供有关如何提取适当的值以填充 Q 的必要属性的更多详细信息。

关于c# - 如何在 RSAParameters 上设置公钥和私钥以用于 RSACryptoServiceProvider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21685939/

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