アットウィキロゴ

RSA

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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。