private RSAParameters _publicKey;
private RSAParameters _privateKey;
public void AssignNewKey()
{
using (var rsa = new RSACryptoServiceProvider(2048))
{
rsa.PersistKeyInCsp = false;
_publicKey = rsa.ExportParameters(false);
_privateKey = rsa.ExportParameters(true);
}
}
public byte[] EncryptData(byte[] dataToEncrypt)
{
using (var rsa = new RSACryptoServiceProvider(2048))
{
rsa.PersistKeyInCsp = false;
rsa.ImportParameters(_publicKey);
return rsa.Encrypt(dataToEncrypt, true);
}
}
public byte[] DecryptData(byte[] dataToDecrypt)
{
using (var rsa = new RSACryptoServiceProvider(2048))
{
rsa.PersistKeyInCsp = false;
rsa.ImportParameters(_privateKey);
return rsa.Decrypt(dataToDecrypt, true);
}
}
RSA using Xml String Key
public void AssignNewKey(string publicKeyPath, string privateKeyPath)
{
using (var rsa = new RSACryptoServiceProvider(2048))
{
rsa.PersistKeyInCsp = false;
if (File.Exists(privateKeyPath))
{
File.Delete(privateKeyPath);
}
if (File.Exists(publicKeyPath))
{
File.Delete(publicKeyPath);
}
var publicKeyfolder = Path.GetDirectoryName(publicKeyPath);
var privateKeyfolder = Path.GetDirectoryName(privateKeyPath);
if (!Directory.Exists(publicKeyfolder))
{
Directory.CreateDirectory(publicKeyfolder);
}
if (!Directory.Exists(privateKeyfolder))
{
Directory.CreateDirectory(privateKeyfolder);
}
File.WriteAllText(publicKeyPath, rsa.ToXmlString(false));
File.WriteAllText(privateKeyPath, rsa.ToXmlString(true));
}
}
public byte[] EncryptData(string publicKeyPath, byte[] dataToEncrypt)
{
using (var rsa = new RSACryptoServiceProvider(2048))
{
rsa.PersistKeyInCsp = false;
rsa.FromXmlString(File.ReadAllText(publicKeyPath));
return rsa.Encrypt(dataToEncrypt, false);
}
}
public byte[] DecryptData(string privateKeyPath, byte[] dataToDecrypt)
{
using (var rsa = new RSACryptoServiceProvider(2048))
{
rsa.PersistKeyInCsp = false;
rsa.FromXmlString(File.ReadAllText(privateKeyPath));
return rsa.Decrypt(dataToDecrypt, false);
}
}
RSA using KeyContainerName
const string ContainerName = "MyContainer";
public void AssignNewKey()
{
CspParameters cspParams = new CspParameters(1);
cspParams.KeyContainerName = ContainerName;
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
cspParams.ProviderName = "Microsoft Strong Cryptographic Provider";
var rsa = new RSACryptoServiceProvider(cspParams) { PersistKeyInCsp = true };
}
public void DeleteKeyInCsp()
{
var cspParams = new CspParameters { KeyContainerName = ContainerName };
var rsa = new RSACryptoServiceProvider(cspParams) { PersistKeyInCsp = false };
rsa.Clear();
}
public byte[] EncryptData(byte[] dataToEncrypt)
{
var cspParams = new CspParameters { KeyContainerName = ContainerName };
using (var rsa = new RSACryptoServiceProvider(2048, cspParams))
{
return rsa.Encrypt(dataToEncrypt, false);
}
}
public byte[] DecryptData(byte[] dataToDecrypt)
{
var cspParams = new CspParameters { KeyContainerName = ContainerName };
using (var rsa = new RSACryptoServiceProvider(2048, cspParams))
{
return rsa.Decrypt(dataToDecrypt, false);
}
}
Không có nhận xét nào :
Đăng nhận xét