using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Security.Cryptography;
using System.Xml;
namespace wComm.Crypto
{
public class RSA
{
public RSA(string keyModifier, KeyStrength s)
{
CONTAINER_NAME = keyModifier;
KEY_STRENGTH = s;
AssignParameter();
}
private void CheckValidation()
{
if (String.IsNullOrEmpty(CONTAINER_NAME))
{
throw new Exception("keyModifier Cannot be null or empty.");
}
}
#region Vars
private RSACryptoServiceProvider rsa;
public enum KeyStrength{ _128 = 128, _256 = 256, _512 = 512, _768 = 768, _1024 = 1024, _2048 = 2048 };
private string _CONTAINER_NAME;
public string CONTAINER_NAME
{
get { return _CONTAINER_NAME; }
set { _CONTAINER_NAME = value; }
}
private KeyStrength _KEY_STRENGTH;
public KeyStrength KEY_STRENGTH
{
get { return _KEY_STRENGTH; }
set { _KEY_STRENGTH = value; }
}
#endregion
#region Misc
private void AssignParameter()
{
CheckValidation();
CspParameters cspParams;
cspParams = new CspParameters((int)KEY_STRENGTH);
cspParams.KeyContainerName = CONTAINER_NAME;
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
cspParams.ProviderName = "Microsoft Strong Cryptographic Provider";
rsa = new RSACryptoServiceProvider(cspParams);
}
public void AssignNewKeys(string privateKeyLocation, string publicKeyLocation)
{
AssignParameter();
StreamWriter writer = new StreamWriter(privateKeyLocation);
string publicPrivateKeyXML = rsa.ToXmlString(true);
writer.Write(publicPrivateKeyXML);
writer.Close();
writer = new StreamWriter(publicKeyLocation);
string publicOnlyKeyXML = rsa.ToXmlString(false);
writer.Write(publicOnlyKeyXML);
writer.Close();
}
#endregion
#region Encrypt
public Byte[] EncryptDataToByteArray(string data2Encrypt, string publicKey)
{
CheckValidation();
AssignParameter();
rsa.FromXmlString(publicKey);
byte[] plainbytes = System.Text.Encoding.UTF8.GetBytes(data2Encrypt);
return rsa.Encrypt(plainbytes, false);
}
public Byte[] EncryptDataToByteArray(Byte[] data2Encrypt, string publicKey)
{
CheckValidation();
AssignParameter();
rsa.FromXmlString(publicKey);
byte[] plainbytes = data2Encrypt;
return rsa.Encrypt(plainbytes, false);
}
public Byte[] EncryptDataToByteArray(string data2Encrypt, XmlDocument publicKey)
{
CheckValidation();
AssignParameter();
rsa.FromXmlString(publicKey.InnerXml);
byte[] plainbytes = System.Text.Encoding.UTF8.GetBytes(data2Encrypt);
return rsa.Encrypt(plainbytes, false);
}
public Byte[] EncryptDataToByteArray(Byte[] data2Encrypt, XmlDocument publicKey)
{
CheckValidation();
AssignParameter();
rsa.FromXmlString(publicKey.InnerXml);
byte[] plainbytes = data2Encrypt;
return rsa.Encrypt(plainbytes, false);
}
public string EncryptDataToString(string data2Encrypt, string publicKey)
{
CheckValidation();
AssignParameter();
rsa.FromXmlString(publicKey);
byte[] plainbytes = System.Text.Encoding.UTF8.GetBytes(data2Encrypt);
byte[] cipherbytes = rsa.Encrypt(plainbytes, false);
return Convert.ToBase64String(cipherbytes);
}
public string EncryptDataToString(Byte[] data2Encrypt, string publicKey)
{
CheckValidation();
AssignParameter();
rsa.FromXmlString(publicKey);
byte[] plainbytes = data2Encrypt;
byte[] cipherbytes = rsa.Encrypt(plainbytes, false);
return Convert.ToBase64String(cipherbytes);
}
public string EncryptDataToString(string data2Encrypt, XmlDocument publicKey)
{
CheckValidation();
AssignParameter();
rsa.FromXmlString(publicKey.InnerXml);
byte[] plainbytes = System.Text.Encoding.UTF8.GetBytes(data2Encrypt);
byte[] cipherbytes = rsa.Encrypt(plainbytes, false);
return Convert.ToBase64String(cipherbytes);
}
public string EncryptDataToString(Byte[] data2Encrypt, XmlDocument publicKey)
{
CheckValidation();
AssignParameter();
rsa.FromXmlString(publicKey.InnerXml);
byte[] plainbytes = data2Encrypt;
byte[] cipherbytes = rsa.Encrypt(plainbytes, false);
return Convert.ToBase64String(cipherbytes);
}
#endregion
#region Decrypt
public string DecryptDataToByteArray(string data2Decrypt, string privateKey)
{
AssignParameter();
byte[] getpassword = Convert.FromBase64String(data2Decrypt);
rsa.FromXmlString(privateKey);
byte[] plain = rsa.Decrypt(getpassword, false);
return System.Text.Encoding.UTF8.GetString(plain);
}
public string DecryptDataToByteArray(Byte[] data2Decrypt, string privateKey)
{
AssignParameter();
byte[] getpassword = data2Decrypt;
rsa.FromXmlString(privateKey);
byte[] plain = rsa.Decrypt(getpassword, false);
return System.Text.Encoding.UTF8.GetString(plain);
}
public Byte[] DecryptDataToString(string data2Decrypt, string privateKey)
{
AssignParameter();
byte[] getpassword = Convert.FromBase64String(data2Decrypt);
rsa.FromXmlString(privateKey);
return rsa.Decrypt(getpassword, false);
}
public Byte[] DecryptDataToString(Byte[] data2Decrypt, string privateKey)
{
AssignParameter();
byte[] getpassword = data2Decrypt;
rsa.FromXmlString(privateKey);
return rsa.Decrypt(getpassword, false);
}
public string DecryptDataToByteArray(string data2Decrypt, XmlDocument privateKey)
{
AssignParameter();
byte[] getpassword = Convert.FromBase64String(data2Decrypt);
rsa.FromXmlString(privateKey.InnerXml);
byte[] plain = rsa.Decrypt(getpassword, false);
return System.Text.Encoding.UTF8.GetString(plain);
}
public string DecryptDataToByteArray(Byte[] data2Decrypt, XmlDocument privateKey)
{
AssignParameter();
byte[] getpassword = data2Decrypt;
rsa.FromXmlString(privateKey.InnerXml);
byte[] plain = rsa.Decrypt(getpassword, false);
return System.Text.Encoding.UTF8.GetString(plain);
}
public Byte[] DecryptDataToString(string data2Decrypt, XmlDocument privateKey)
{
AssignParameter();
byte[] getpassword = Convert.FromBase64String(data2Decrypt);
rsa.FromXmlString(privateKey.InnerXml);
return rsa.Decrypt(getpassword, false);
}
public Byte[] DecryptDataToString(Byte[] data2Decrypt, XmlDocument privateKey)
{
AssignParameter();
byte[] getpassword = data2Decrypt;
rsa.FromXmlString(privateKey.InnerXml);
return rsa.Decrypt(getpassword, false);
}
#endregion
}
}