Thứ Hai, 9 tháng 1, 2017

Asymmetric Algorithm examples in .Net

RSA using RSAParameter Key
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