2
我想用rsa在c#中加密和解密數據。我寫了這段代碼,它對加密工作正常,但我有解密問題。我的問題是什麼?!如何導入私鑰到c#RSAParameters對象?
這裏是我的代碼:
using System;
using System.Security.Cryptography;
using System.IO;
using System.Text;
namespace Cry
{
public class CryptoUtils
{
public CryptoUtils()
{
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] dataToEncrypt = ByteConverter.GetBytes("Data to Encrypt");
byte[] encryptedData;
byte[] decryptedData;
string decrptedStr = "";
var pub = Convert.FromBase64String("MCgCIQCfkl4xV5T/v3r1bifOc1mVHa9yak5pGjUfAv0r+s6+AwIDAQAB");
var prv = Convert.FromBase64String("MIGsAgEAAiEAn5JeMVeU/7969W4nznNZlR2vcmpOaRo1HwL9K/rOvgMCAwEAAQIg\nMce6pM/6xpIYrMoxluE7JBkVe9Sme9d6NPPJJX3NyBECEgCmwIarl1hSBnTqZNwJ\n8hZhqwIQAPT6CO/l/ma1sDi7eM7tCQISAKH90lYLlr9IinfSN3hp95g1AhAAlyNf\nuioqX1G+y/GVogyJAhEmQQB52juSQ574HnampzXUpQ==");
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider()) {
RSAParameters myRSAParameters = RSA.ExportParameters(false);
myRSAParameters.Modulus = pub;
myRSAParameters.Exponent = ByteConverter.GetBytes("65537");
myRSAParameters.D = prv;
encryptedData = RSAEncrypt(dataToEncrypt, myRSAParameters, false);
decryptedData = RSADecrypt(encryptedData, myRSAParameters, false);
decrptedStr = ByteConverter.GetString(decryptedData);
}
}
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;
}
}
}
}
在行encryptedData = RSAEncrypt(dataToEncrypt, myRSAParameters, false);
數據加密,但在接下來的行我有這樣的錯誤:
我想我did'nt填寫myRSAParameters
正確,但是我的屬性不知道如何填補它!
你從哪裏得到'pub'和'prv'的base64編碼值? –
'pub'包含一個ASN.1編碼的公鑰(PKCS#1結構),'priv'包含私鑰(包括所有的256位RSA密鑰對,包括CRT參數)。他們不*代表模數和私人指數。 –
來自pem文件! – Amin