zoukankan      html  css  js  c++  java
  • CryptographyHelper, Symmetric Algorithm, Asymmetric Algorithm, Hash Algorithm, Keyed Hash Algorithm, RSA, X509

    
    /*
    makecert.exe -n "CN=Microshaoft X509 Test - A" -sky exchange -pe -sv a.pvk a.cer
    pvk2pfx.exe -pvk a.pvk -spc a.cer -pfx a.pfx -f -po 123
    makecert.exe -n "CN=Microshaoft X509 Test - B" -sky exchange -pe -sv b.pvk b.cer
    pvk2pfx.exe -pvk b.pvk -spc b.cer -pfx b.pfx -f -po abc
    */
    namespace Test
    {
        using System;
        using System.IO;
        using System.Text;
        using System.Threading;
        using System.Security.Cryptography;
        using System.Security.Cryptography.X509Certificates;
        using Microshaoft;
        class Class1
        {
            static void Main()
            {
                //=======================================
                UTF8Encoding e = new UTF8Encoding();
                string s;
                byte[] data = e.GetBytes
                                    (
    @"测试@microshaoft.com测试@microshaoft.com测试@microshaoft.com
    测试@microshaoft.com测试@microshaoft.com测试@microshaoft.com");
                byte[] encryptedData;
                // Hybird
                Console.WriteLine("Hybird(X509+3DES):=====================");
                X509Certificate2 cerA = new X509Certificate2(@"C:\Users\xiyueyu\Desktop\a.cer");
                X509Certificate2 pfxA = new X509Certificate2(@"C:\Users\xiyueyu\Desktop\a.pfx", "123");
                X509Certificate2 cerB = new X509Certificate2(@"C:\Users\xiyueyu\Desktop\b.cer");
                Secret secret = CryptographyHelper.HybridEncrypt
                                                        (
                                                            pfxA
                                                            , cerA
                                                            , cerB
                                                            , HashSignatureMode.SHA1
                                                            , false
                                                            , data
                                                        );
                X509Certificate2 pfxB = new X509Certificate2(@"C:\Users\xiyueyu\Desktop\b.pfx", "abc");
                data = CryptographyHelper.HybridDecrypt(pfxB, secret);
                s = e.GetString(data);
                Console.WriteLine("Hybird decrypted plain text:");
                Console.WriteLine(s);
                //100 字节以内
                s = "测试@microshaoft.com测试@microshaoft.com测试@microshaoft.com测试";
                data = e.GetBytes(s);
                // X509
                Console.WriteLine("\nX509 加解密 只能处理100字节以内的加解密:=====================");
                X509Certificate2[] certs = X509CertificateHelper.LoadCertificatesFromStore
                                                                            (
                                                                                StoreName.My
                                                                                , StoreLocation.CurrentUser
                                                                                , "Microshaoft X509 Test"
                                                                                , X509FindType.FindBySubjectName
                                                                            );
                X509Certificate2 cert = null;
                if (certs != null)
                {
                    foreach (X509Certificate2 c in certs)
                    {
                        Console.WriteLine(c.Subject);
                        cert = c;
                    }
                }
                X509Certificate2 cer = new X509Certificate2(@"C:\Users\xiyueyu\Desktop\a.cer");
                X509Certificate2 pfx = new X509Certificate2(@"C:\Users\xiyueyu\Desktop\a.pfx", "123");
                encryptedData = CryptographyHelper.X509CertificateEncrypt(cer, data, false);
                encryptedData = CryptographyHelper.X509CertificateDecrypt(pfx, encryptedData, false);
                s = e.GetString(encryptedData);
                Console.WriteLine("X509 decrypted plain text: {0}", s);
                //RSA
                Console.WriteLine("\nRSA 加解密 只能处理100字节以内的加解密:=====================");
                // RSA 非证书 只能处理100字节以内的加解密
                s = "测试@microshaoft.com测试@microshaoft.com测试@microshaoft.com测试";
                data = e.GetBytes(s);
                RSACryptoServiceProvider x = new RSACryptoServiceProvider();
                string privateKey = x.ToXmlString(true);
                Console.WriteLine("RSA Private Key: {0}", privateKey);
                string publicKey = x.ToXmlString(false);
                Console.WriteLine("RSA Public Key: {0}", publicKey);
                //公钥加密
                encryptedData = CryptographyHelper.RSAEncrypt(publicKey, data, false);
                //私钥解密
                data = CryptographyHelper.RSADecrypt(privateKey, encryptedData, false);
                Console.WriteLine("RSA Decrypted plaintext: {0}", e.GetString(data));
                //私钥签名
                byte[] signature = CryptographyHelper.RSASignSHA1(privateKey, data);
                //公钥验签
                Console.WriteLine(CryptographyHelper.RSAVerifySHA1(publicKey, data, signature));
                //TripleDES
                Console.WriteLine("\nTripleDES:===============");
                string key = "000111222333444555666777888999aaabbbcccdddeeefff";//48
                key = "0123456789abcdef01111111111111111111111111111110";
                string iv = "0123456789abcdef";//16
                iv = "0000000000000000";
                data = e.GetBytes("测试@microshaoft.com");
                SymmetricAlgorithm symmetricAlgorithm = new TripleDESCryptoServiceProvider();
                symmetricAlgorithm.Key = CryptographyHelper.HexStringToBytesArray(key);
                symmetricAlgorithm.IV = CryptographyHelper.HexStringToBytesArray(iv);
                data = CryptographyHelper.SymmetricAlgorithmEncrypt
                                                (
                                                    symmetricAlgorithm
                                                    , data 
                                                );
                //"测试@microshaoft.com"
                //3des: "A668632B4AA1EB8C1B25F7E66128846D28CEB416AC7B7B21"
                //篡改: "B668632B4AA1EB8C1B25F7E66128846D28CEB416AC7B7B21"
                data = CryptographyHelper.SymmetricAlgorithmDecrypt
                                                (
                                                    symmetricAlgorithm, 
                                                    data
                                                );
                Console.WriteLine("3DES Decrypted plaintext: {0}", e.GetString(data));
                Console.WriteLine("X509 并发测试");
                Console.ReadLine();
                encryptorPrivateKeyPfxProvider = encryptorPrivateKeyPfx.PrivateKey as RSACryptoServiceProvider;
                encryptorPublicKeyCerProvider = encryptorPublicKeyCer.PublicKey.Key as RSACryptoServiceProvider;
                decryptorPublicKeyCerProvider = decryptorPublicKeyCer.PublicKey.Key as RSACryptoServiceProvider;
                decryptorPrivateKeyPfxProvider = decryptorPrivateKeyPfx.PrivateKey as RSACryptoServiceProvider;
                for (int i = 0; i < 1000; i++)
                {
                    ThreadStart ts = new ThreadStart(Run);
                    Thread t = new Thread(ts);
                    t.Name = _ThreadID.ToString();
                    _ThreadID++;
                    t.Start();
                    //Run();
                }
                Console.WriteLine(Environment.Version.ToString());
            }
            private static volatile int _ThreadID = 0;
            private static object _syncLockObject = new object();
            private static X509Certificate2 encryptorPrivateKeyPfx = new X509Certificate2(@"a.pfx", "123");
            private static X509Certificate2 encryptorPublicKeyCer = new X509Certificate2(@"a.cer");
            private static X509Certificate2 decryptorPublicKeyCer = new X509Certificate2(@"b.cer");
            private static X509Certificate2 decryptorPrivateKeyPfx = new X509Certificate2(@"b.pfx", "abc");
            private static RSACryptoServiceProvider encryptorPrivateKeyPfxProvider = null;
            private static RSACryptoServiceProvider encryptorPublicKeyCerProvider = null;
            private static RSACryptoServiceProvider decryptorPublicKeyCerProvider = null;
            private static RSACryptoServiceProvider decryptorPrivateKeyPfxProvider = null;
            static void Run()
            {
                ///            X509Certificate2 cerA = null;// = new X509Certificate2(@"C:\Users\xiyueyu\Desktop\a.cer");
                ///            X509Certificate2 pfxA = null;// = new X509Certificate2(@"C:\Users\xiyueyu\Desktop\a.pfx", "123");
                ///            X509Certificate2 cerB = null;// = new X509Certificate2(@"C:\Users\xiyueyu\Desktop\b.cer");
                ///            X509Certificate2 pfxB = null;// = new X509Certificate2(@"C:\Users\xiyueyu\Desktop\b.pfx", "abc");
                //lock (_syncLockObject)
                {
                    try
                    {
                        //Thread.Sleep(50);
                        ///                        cerA = new X509Certificate2(@"C:\Users\xiyueyu\Desktop\a.cer");
                        ///                        pfxA = new X509Certificate2(@"C:\Users\xiyueyu\Desktop\a.pfx", "123");
                        ///                        cerB = new X509Certificate2(@"C:\Users\xiyueyu\Desktop\b.cer");
                        ///                        pfxB = new X509Certificate2(@"C:\Users\xiyueyu\Desktop\b.pfx", "abc");
                        UTF8Encoding e = new UTF8Encoding();
                        string s;
                        byte[] data = e.GetBytes
                                            (
    @"并发测试@microshaoft.com并发测试@microshaoft.com并发测试@microshaoft.com
    并发测试@microshaoft.com并发测试@microshaoft.com并发测试@microshaoft.com
    并发测试@microshaoft.com并发测试@microshaoft.com并发测试@microshaoft.com
    并发测试@microshaoft.com并发测试@microshaoft.com并发测试@microshaoft.com
    并发测试@microshaoft.com并发测试@microshaoft.com并发测试@microshaoft.com
    并发测试@microshaoft.com并发测试@microshaoft.com并发测试@microshaoft.com
    并发测试@microshaoft.com并发测试@microshaoft.com并发测试@microshaoft.com");
                        //byte[] encryptedData;
                        // Hybird
                        //Console.WriteLine("Hybird(X509+3DES):=====================");
                        Secret secret = CryptographyHelper.HybridEncrypt
                                                            (
                                                                encryptorPrivateKeyPfxProvider
                                                                , encryptorPublicKeyCer
                                                                , decryptorPublicKeyCerProvider
                                                                , HashSignatureMode.SHA1
                                                                , false
                                                                , data
                                                            );
                        data = CryptographyHelper.HybridDecrypt
                                                    (
                                                        decryptorPrivateKeyPfxProvider
                                                        , encryptorPublicKeyCerProvider
                                                        , secret
                                                    );
                        s = e.GetString(data);
                        Console.WriteLine("Hybird decrypted plain text: {0}", Thread.CurrentThread.Name);
                        Console.WriteLine(s);
                    }
                    catch (Exception e)
                    {
                        //    Thread.Sleep(1200);
                        Console.WriteLine("exception sleep: {0}", e.ToString());
                        Console.WriteLine("exception sleep: {0}", Thread.CurrentThread.Name);
                        //    Run();
                    }
                    finally
                    {
                        ///                    cerA.Reset();
                        ///                    pfxA.Reset();
                        ///                    cerB.Reset();
                        ///                    cerB.Reset();
                    }
                }
            }
        }
    }
    namespace Microshaoft
    {
        using System;
        using System.Security.Cryptography;
        using System.Security.Cryptography.X509Certificates;
        public static class X509CertificateHelper
        {
            public static X509Certificate2[] LoadCertificatesFromStore
                                                (
                                                    StoreName storeName
                                                    , StoreLocation storeLocation
                                                    , string findValue
                                                    , X509FindType findType
                                                )
            {
                X509Certificate2[] certs = null;
                X509Store store = new X509Store(storeName, storeLocation);
                store.Open(OpenFlags.ReadOnly);
                try
                {
                    X509Certificate2Collection matches = store.Certificates.Find(findType, findValue, false);
                    certs = new X509Certificate2[matches.Count];
                    matches.CopyTo(certs, 0);
                }
                finally
                {
                    store.Close();
                }
                return certs;
            }
        }
    }
    namespace Microshaoft
    {
        using System;
        using System.IO;
        using System.Text;
        using System.Security.Cryptography;
        using System.Security.Cryptography.X509Certificates;
        public class Secret
        {
            public byte[] EncryptorSharedEncryptedOnceKey;
            public byte[] EncryptorSharedEncryptedOnceIV;
            public byte[] EncryptorHashSignature;
            public byte[] EncryptorPublicKeyCerRawData;
            public byte[] EncryptedData;
            public HashSignatureMode SignHashMode;
            public bool DoOAEPadding;
        }
        public enum HashSignatureMode
        {
            MD5
            , SHA1
        }
        public static class CryptographyHelper
        {
            public static byte[] HybridDecrypt
                                        (
                                            X509Certificate2 decryptorPrivateKeyPfx
                                            , Secret data
                                        )
            {
                X509Certificate2 encryptorPublicKeyCer = null;
                try
                {
                    RSACryptoServiceProvider decryptorPrivateKeyPfxProvider = decryptorPrivateKeyPfx.PrivateKey as RSACryptoServiceProvider;
                    encryptorPublicKeyCer = new X509Certificate2(data.EncryptorPublicKeyCerRawData);
                    RSACryptoServiceProvider encryptorPublicKeyCerProvider = encryptorPublicKeyCer.PublicKey.Key as RSACryptoServiceProvider;
                    return HybridDecrypt
                                        (
                                            decryptorPrivateKeyPfxProvider
                                            , encryptorPublicKeyCerProvider
                                            , data
                                        );
                }
                catch
                {
                    return null;
                }
                finally
                {
                    if (encryptorPublicKeyCer != null)
                    {
                        encryptorPublicKeyCer.Reset();
                    }
                }
            }
            public static byte[] HybridDecrypt
                                        (
                                            RSACryptoServiceProvider decryptorPrivateKeyPfxProvider
                                            , RSACryptoServiceProvider encryptorPublicKeyCerProvider
                                            , Secret data
                                        )
            {
                byte[] buffer = null;
                HashAlgorithm hashAlgorithm;
                if (data.SignHashMode == HashSignatureMode.SHA1)
                {
                    hashAlgorithm = new SHA1CryptoServiceProvider();
                }
                else //(hashSignatureMode == HashSignatureMode.MD5)
                {
                    hashAlgorithm = new MD5CryptoServiceProvider();
                }
                using (MemoryStream stream = new MemoryStream())
                {
                    buffer = data.EncryptorSharedEncryptedOnceIV;
                    stream.Write(buffer, 0, buffer.Length);
                    buffer = data.EncryptorSharedEncryptedOnceKey;
                    stream.Write(buffer, 0, buffer.Length);
                    buffer = data.EncryptedData;
                    stream.Position = 0;
                    buffer = hashAlgorithm.ComputeHash(stream);
                    stream.Close();
                }
                //X509Certificate2 encryptorPublicKeyCer = new X509Certificate2(data.EncryptorPublicKeyCerRawData);
                //RSACryptoServiceProvider encryptorPublicKeyCerProvider = encryptorPublicKeyCer.PublicKey.Key as RSACryptoServiceProvider;
                if (encryptorPublicKeyCerProvider.VerifyHash
                                                    (
                                                        buffer
                                                        , Enum.GetName
                                                                    (
                                                                        data.SignHashMode.GetType()
                                                                        , data.SignHashMode
                                                                    )
                                                        , data.EncryptorHashSignature
                                                    )
                    )
                {
                    //decryptorPrivateKeyPfxProvider = decryptorPrivateKeyPfx.PrivateKey as RSACryptoServiceProvider;
                    using (TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider())
                    {
                        buffer = data.EncryptorSharedEncryptedOnceIV;
                        buffer = decryptorPrivateKeyPfxProvider.Decrypt(buffer, data.DoOAEPadding);
                        des.IV = buffer;
                        buffer = data.EncryptorSharedEncryptedOnceKey;
                        buffer = decryptorPrivateKeyPfxProvider.Decrypt(buffer, data.DoOAEPadding);
                        des.Key = buffer;
                        buffer = data.EncryptedData;
                        buffer = des.CreateDecryptor().TransformFinalBlock(buffer, 0, buffer.Length);
                    }
                }
                else
                {
                    buffer = null;
                }
                return buffer;
            }
            public static Secret HybridEncrypt
                                        (
                                            byte[] encryptorPrivateKeyPfxRawData
                                            , byte[] encryptorPublicKeyCerRawData
                                            , byte[] decryptorPublicKeyCerRawData
                                            , HashSignatureMode hashSignatureMode
                                            , bool DoOAEPadding
                                            , byte[] data
                                        )
            {
                X509Certificate2 encryptorPrivateKeyPfx = null;
                X509Certificate2 encryptorPublicKeyCer = null;
                X509Certificate2 decryptorPublicKeyCer = null;
                try
                {
                    encryptorPrivateKeyPfx = null;
                    encryptorPublicKeyCer = null;
                    decryptorPublicKeyCer = null;
                    return HybridEncrypt
                            (
                                encryptorPrivateKeyPfx
                                , encryptorPublicKeyCer
                                , decryptorPublicKeyCer
                                , hashSignatureMode
                                , DoOAEPadding
                                , data
                            );
                }
                catch
                {
                    return null;
                }
                finally
                {
                    if (encryptorPrivateKeyPfx != null)
                    {
                        encryptorPrivateKeyPfx.Reset();
                    }
                    if (encryptorPublicKeyCer != null)
                    {
                        encryptorPublicKeyCer.Reset();
                    }
                    if (decryptorPublicKeyCer != null)
                    {
                        decryptorPublicKeyCer.Reset();
                    }
                }
            }
            public static Secret HybridEncrypt
                                        (
                                            string encryptorPrivateKeyPfxFileName
                                            , string encryptorPublicKeyCerFileName
                                            , string decryptorPublicKeyCerFileName
                                            , HashSignatureMode hashSignatureMode
                                            , bool DoOAEPadding
                                            , byte[] data
                                        )
            {
                X509Certificate2 encryptorPrivateKeyPfx = null;
                X509Certificate2 encryptorPublicKeyCer = null;
                X509Certificate2 decryptorPublicKeyCer = null;
                try
                {
                    encryptorPrivateKeyPfx = new X509Certificate2(encryptorPrivateKeyPfxFileName);
                    encryptorPublicKeyCer = new X509Certificate2(encryptorPublicKeyCerFileName);
                    decryptorPublicKeyCer = new X509Certificate2(decryptorPublicKeyCerFileName);
                    return HybridEncrypt
                            (
                                encryptorPrivateKeyPfx
                                , encryptorPublicKeyCer
                                , decryptorPublicKeyCer
                                , hashSignatureMode
                                , DoOAEPadding
                                , data
                            );
                }
                catch
                {
                    return null;
                }
                finally
                {
                    if (encryptorPrivateKeyPfx != null)
                    {
                        encryptorPrivateKeyPfx.Reset();
                    }
                    if (encryptorPublicKeyCer != null)
                    {
                        encryptorPublicKeyCer.Reset();
                    }
                    if (decryptorPublicKeyCer != null)
                    {
                        decryptorPublicKeyCer.Reset();
                    }
                }
            }
            public static Secret HybridEncrypt
                                        (
                                            X509Certificate2 encryptorPrivateKeyPfx
                                            , X509Certificate2 encryptorPublicKeyCer
                                            , X509Certificate2 decryptorPublicKeyCer
                                            , HashSignatureMode signHashMode
                                            , bool DoOAEPadding
                                            , byte[] data
                                        )
            {
                RSACryptoServiceProvider encryptorPrivateKeyPfxProvider = encryptorPrivateKeyPfx.PrivateKey as RSACryptoServiceProvider;
                RSACryptoServiceProvider decryptorPublicKeyCerProvider = decryptorPublicKeyCer.PublicKey.Key as RSACryptoServiceProvider;
                return HybridEncrypt
                            (
                                encryptorPrivateKeyPfxProvider
                                , encryptorPublicKeyCer
                                , decryptorPublicKeyCerProvider
                                , signHashMode
                                , DoOAEPadding
                                , data
                            );
            }
            public static Secret HybridEncrypt
                                        (
                                            RSACryptoServiceProvider encryptorPrivateKeyPfxProvider
                                            , X509Certificate2 encryptorPublicKeyCer
                                            , RSACryptoServiceProvider decryptorPublicKeyCerProvider
                                            , HashSignatureMode signHashMode
                                            , bool DoOAEPadding
                                            , byte[] data
                                        )
            {
                Secret secret = new Secret();
                using (TripleDESCryptoServiceProvider provider = new TripleDESCryptoServiceProvider())
                {
                    provider.GenerateIV();
                    secret.EncryptorSharedEncryptedOnceIV = provider.IV;
                    provider.GenerateKey();
                    secret.EncryptorSharedEncryptedOnceKey = provider.Key;
                    secret.EncryptedData = provider.CreateEncryptor().TransformFinalBlock(data, 0, data.Length);
                }
                secret.EncryptorSharedEncryptedOnceIV = decryptorPublicKeyCerProvider.Encrypt(secret.EncryptorSharedEncryptedOnceIV, DoOAEPadding);
                secret.EncryptorSharedEncryptedOnceKey = decryptorPublicKeyCerProvider.Encrypt(secret.EncryptorSharedEncryptedOnceKey, DoOAEPadding);
                HashAlgorithm hashAlgorithm;
                if (signHashMode == HashSignatureMode.SHA1)
                {
                    hashAlgorithm = new SHA1CryptoServiceProvider();
                }
                else //(hashSignatureMode == HashSignatureMode.MD5)
                {
                    hashAlgorithm = new MD5CryptoServiceProvider();
                }
                MemoryStream stream = new MemoryStream();
                byte[] buffer = secret.EncryptorSharedEncryptedOnceIV;
                stream.Write(buffer, 0, buffer.Length);
                buffer = secret.EncryptorSharedEncryptedOnceKey;
                stream.Write(buffer, 0, buffer.Length);
                buffer = secret.EncryptedData;
                stream.Position = 0;
                buffer = hashAlgorithm.ComputeHash(stream);
                stream.Close();
                stream.Dispose();
                secret.EncryptorHashSignature = encryptorPrivateKeyPfxProvider.SignHash
                                                                                    (
                                                                                        buffer
                                                                                        , Enum.GetName
                                                                                                    (
                                                                                                        signHashMode.GetType()
                                                                                                        , signHashMode
                                                                                                    )
                                                                                    );
                secret.EncryptorPublicKeyCerRawData = encryptorPublicKeyCer.RawData;
                secret.SignHashMode = signHashMode;
                secret.DoOAEPadding = DoOAEPadding;
                return secret;
            }
            public static string GenerateTripleDESHexStringKey()
            {
                TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
                des.GenerateKey();
                return BytesArrayToHexString(des.Key);
            }
            public static string GenerateTripleDESHexStringIV()
            {
                TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
                des.GenerateIV();
                return BytesArrayToHexString(des.IV);
            }
           public static byte[] SymmetricAlgorithmEncrypt
                                   (
                                        SymmetricAlgorithm algorithm
                                        , byte[] data
                                    )
            {
                return algorithm.CreateEncryptor().TransformFinalBlock(data, 0, data.Length);
            }
            public static byte[] SymmetricAlgorithmEncrypt
                                           (
                                                SymmetricAlgorithm algorithm
                                                , string text
                                                , Encoding e
                                            )
            {
                return SymmetricAlgorithmEncrypt
                                (
                                    algorithm
                                    , e.GetBytes(text)
                                );
            }
            public static byte[] SymmetricAlgorithmDecrypt
                                            (
                                                SymmetricAlgorithm algorithm
                                                , byte[] data
                                             )
            {
                return algorithm.CreateDecryptor().TransformFinalBlock(data, 0, data.Length);
            }
            public static string SymmetricAlgorithmDecrypt
                                            (
                                                SymmetricAlgorithm algorithm
                                                , byte[] data
                                                , Encoding e //原文的encoding
                                            )
            {
                return e.GetString
                            (
                                SymmetricAlgorithmDecrypt
                                                    (
                                                        algorithm
                                                        , data
                                                    )
                            );
            }
            public static byte[] ComputeHash
                                        (
                                            HashAlgorithm algorithm
                                            , byte[] data
                                        )
            {
                return algorithm.ComputeHash(data);
            }
            public static byte[] ComputeHash
                                        (
                                            HashAlgorithm algorithm
                                            , string text
                                            , Encoding e
                                        )
            {
                return ComputeHash(algorithm, e.GetBytes(text));
            }
            public static byte[] ComputeKeyedHash
                                        (
                                            KeyedHashAlgorithm algorithm
                                            , byte[] data
                                        )
            {
                return ComputeHash(algorithm, data);
            }
            public static byte[] ComputeKeyedHash
                                        (
                                            KeyedHashAlgorithm algorithm
                                            , string text
                                            , Encoding e
                                        )
            {
                return ComputeHash(algorithm, text, e);
            }
                    public static byte[] RSASignSHA1
                                    (
                                        string privateKeyXml
                                        , byte[] data
                                    )
            {
                RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
                provider.FromXmlString(privateKeyXml);
                return RSASignSHA1
                            (
                                provider
                                , data
                            );
            }
            public static byte[] RSASignSHA1
                                    (
                                        RSACryptoServiceProvider provider
                                        , byte[] data
                                    )
            {
                HashAlgorithm hashAlgorithm = new SHA1CryptoServiceProvider();
                return provider.SignHash
                                    (
                                        ComputeHash(hashAlgorithm, data)
                                        , "SHA1"
                                    );
            }
            public static bool RSAVerifySHA1
                                    (
                                        string publicKeyXml
                                        , byte[] data
                                        , byte[] signature
                                    )
            {
                RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
                provider.FromXmlString(publicKeyXml);
                return RSAVerifySHA1
                                (
                                    provider
                                    , data
                                    , signature
                                );
            }
            public static bool RSAVerifySHA1
                                    (
                                        RSACryptoServiceProvider provider
                                        , byte[] data
                                        , byte[] signature
                                    )
            {
                HashAlgorithm hashAlgorithm = new SHA1CryptoServiceProvider();
                return provider.VerifyHash
                                    (
                                        ComputeHash(hashAlgorithm, data)
                                        , "SHA1"
                                        , signature
                                    );
            }
            public static byte[] RSASignMD5
                                    (
                                        string privateKeyXml
                                        , byte[] data
                                    )
            {
                RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
                provider.FromXmlString(privateKeyXml);
                return RSASignMD5
                            (
                                provider
                                , data
                            );
            }
            public static byte[] RSASignMD5
                                    (
                                        RSACryptoServiceProvider provider
                                        , byte[] data
                                    )
            {
                HashAlgorithm hashAlgorithm = new MD5CryptoServiceProvider();
                return provider.SignHash
                            (
                                ComputeHash(hashAlgorithm, data)
                                , "MD5"
                            );
            }
            public static bool RSAVerifyMD5
                                    (
                                        string publicKeyXml
                                        , byte[] data
                                        , byte[] signature
                                    )
            {
                RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
                provider.FromXmlString(publicKeyXml);
                return RSAVerifyMD5
                                (
                                    provider
                                    , data
                                    , signature
                                );
            }
            public static bool RSAVerifyMD5
                                    (
                                        RSACryptoServiceProvider provider
                                        , byte[] data
                                        , byte[] signature
                                    )
            {
                HashAlgorithm hashAlgorithm = new MD5CryptoServiceProvider();
                return provider.VerifyHash
                                    (
                                        ComputeHash(hashAlgorithm, data)
                                        , "MD5"
                                        , signature
                                    );
            }
            public static byte[] RSAEncrypt
                                    (
                                        string publicKeyXml
                                        , byte[] data
                                        , bool DoOAEPPadding
                                    )
            {
                RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
                provider.FromXmlString(publicKeyXml);
                return RSAEncrypt
                            (
                                provider
                                , data
                                , DoOAEPPadding
                            );
            }
            public static byte[] RSAEncrypt
                            (
                                RSACryptoServiceProvider provider
                                , byte[] data
                                , bool DoOAEPPadding
                            )
            {
                return provider.Encrypt(data, DoOAEPPadding);
            }
            public static byte[] RSADecrypt
                                    (
                                        string privateKeyXml
                                        , byte[] data
                                        , bool DoOAEPPadding
                                    )
            {
                RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
                provider.FromXmlString(privateKeyXml);
                return RSADecrypt
                            (
                                provider
                                , data
                                , DoOAEPPadding
                            );
            }
            public static byte[] RSADecrypt
                                    (
                                        RSACryptoServiceProvider provider
                                        , byte[] data
                                        , bool DoOAEPPadding
                                    )
            {
                return provider.Decrypt(data, DoOAEPPadding);
            }
            public static byte[] X509CertificateEncrypt
                                        (
                                            X509Certificate2 publicKeyCer
                                            , byte[] data
                                            , bool DoOAEPadding
                                        )
            {
                RSACryptoServiceProvider provider = publicKeyCer.PublicKey.Key as RSACryptoServiceProvider;
                return RSAEncrypt
                            (
                                provider
                                , data
                                , DoOAEPadding
                            );
            }
            public static byte[] X509CertificateDecrypt
                                        (
                                            X509Certificate2 privateKeyPfx
                                            , byte[] data
                                            , bool DoOAEPadding
                                        )
            {
                RSACryptoServiceProvider provider = privateKeyPfx.PrivateKey as RSACryptoServiceProvider;
                return RSADecrypt
                            (
                                provider
                                , data
                                , DoOAEPadding
                            );
            }
            public static byte[] X509CertificateSignSHA1
                                        (
                                            X509Certificate2 privateKeyPfx
                                            , byte[] data
                                        )
            {
                RSACryptoServiceProvider provider = privateKeyPfx.PrivateKey as RSACryptoServiceProvider;
                return RSASignSHA1
                            (
                                provider
                                , data
                            );
            }
            public static byte[] X509CertificateSignMD5
                                        (
                                            X509Certificate2 privateKeyPfx
                                            , byte[] data
                                        )
            {
                RSACryptoServiceProvider provider = privateKeyPfx.PrivateKey as RSACryptoServiceProvider;
                return RSASignMD5(provider, data);
            }
            public static bool X509CertificateVerifySHA1
                                        (
                                            X509Certificate2 publicKeyCer
                                            , byte[] data
                                            , byte[] signature
                                        )
            {
                RSACryptoServiceProvider provider = publicKeyCer.PublicKey.Key as RSACryptoServiceProvider;
                return RSAVerifySHA1
                            (
                                provider
                                , data
                                , signature
                            );
            }
            public static bool X509CertificateVerifyMD5
                                        (
                                            X509Certificate2 publicKeyCer
                                            , byte[] data
                                            , byte[] signature
                                        )
            {
                RSACryptoServiceProvider provider = publicKeyCer.PublicKey.Key as RSACryptoServiceProvider;
                return RSAVerifyMD5
                            (
                                provider
                                , data
                                , signature
                            );
            }
            public static string BytesArrayToHexString(byte[] data)
            {
                return BitConverter.ToString(data).Replace("-", "");
            }
            public static byte[] HexStringToBytesArray(string text)
            {
                text = text.Replace(" ", "");
                int l = text.Length;
                byte[] buffer = new byte[l / 2];
                for (int i = 0; i < l; i += 2)
                {
                    buffer[i / 2] = Convert.ToByte(text.Substring(i, 2), 16);
                }
                return buffer;
            }
        }
    }
    
    
  • 相关阅读:
    自然语言交流系统 phxnet团队 创新实训 项目博客 (十一)
    install ubuntu on Android mobile phone
    Mac OS, Mac OSX 与Darwin
    About darwin OS
    自然语言交流系统 phxnet团队 创新实训 项目博客 (十)
    Linux下编译安装qemu和libvirt
    libvirt(virsh命令总结)
    深入浅出 kvm qemu libvirt
    自然语言交流系统 phxnet团队 创新实训 项目博客 (九)
    自然语言交流系统 phxnet团队 创新实训 项目博客 (八)
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/2106920.html
Copyright © 2011-2022 走看看