using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
namespace DesignProject
{
class RSA
{
public static KeyValuePair<string, string> CreateKeyPair(string keyContainerName)
{
CspParameters csp = new CspParameters();
csp.KeyContainerName = keyContainerName;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);
return(new KeyValuePair<string, string>(rsa.ToXmlString(false), rsa.ToXmlString(true)));
}
public static string Encrypt(string source, string publicKey)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(publicKey);
byte[] data = Encoding.UTF8.GetBytes(source);
byte[] encryptedData = rsa.Encrypt(data, IsOSVersionXpOrMore());
return(Convert.ToBase64String(encryptedData));
}
public static string Encrypt(string source, KeyValuePair<string, string> keysPair)
{
return (Encrypt(source, keysPair.Key));
}
public static string Decrypt(string encryptedStr, string privateKey)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(privateKey);
byte[] data = Convert.FromBase64String(encryptedStr);
byte[] decryptedData = rsa.Decrypt(data, IsOSVersionXpOrMore());
return(Encoding.UTF8.GetString(decryptedData));
}
public static string Decrypt(string str, KeyValuePair<string, string> keysPair)
{
return(Decrypt(str, keysPair.Value));
}
public static void DeleteKeyFromContainer(string keyContainerName)
{
CspParameters csp = new CspParameters();
csp.KeyContainerName = keyContainerName;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);
rsa.PersistKeyInCsp = false;
rsa.Clear();
}
public static bool IsOSVersionXpOrMore()
{
OperatingSystem os = Environment.OSVersion;
switch (os.Platform)
{
case PlatformID.Win32Windows: // Windows 9x系
return (false);
case PlatformID.Win32NT: // Windows NT系
if (os.Version.Major == 4) return (false); //Windows NT 4.0
if (os.Version.Minor <= 0) return (false); //Windows2000
return (true);
default: return (true);
}
}
}
}
最終更新:2010年12月15日 15:45