常用的一些加密算法,留着以备不时之需

AES

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。AES先进加密算法是一向被认为牢不可破的加密算法,针对这项加密算法的攻击是异常复杂的,事实上想要完全破解AES花费的时间要以数十亿年计,极大的保证了数据的安全性。

这里有两个加密、解密方法: 一种是带密钥的加密;一种是动态加密,就是不需要密钥,密钥被动态生成并且保存在密文中,解密时先解密密钥,在解密密文。

using System;
using System.Security.Cryptography;
using System.Text;

namespace Common.CryptHelper
{
    public class AESCrypt
    {
       public const string RET_ERROR = "x07x07x07x07x07";
       private byte[] _IV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
       private byte[] _Key = { 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 };
       private const string CRYPTO_KEY = "ADVANCEDENCRYPTIONSTANDARD";
       private int CRYPTO_KEY_LENGTH = 32;

       private AesCryptoServiceProvider m_aesCryptoServiceProvider;
       private string m_message;
       public string Message
       {
           get { return m_message; }
           set { m_message = value; }
       }
       private bool m_containKey;
       /// <summary>
       /// True:密文中包含密钥
       /// False:密文中不包含密钥
       /// </summary>
       public bool ContainKey
       {
           get { return m_containKey; }
           set { m_containKey = value; }
       }
       public AESCrypt()
       {
           m_aesCryptoServiceProvider = new AesCryptoServiceProvider();
           m_containKey = true;
           m_message = string.Empty;
       }
       public AESCrypt(bool containKey)
           : this()
       {
           m_containKey = containKey;
       }
       private string Encrypt(string s_crypto, byte[] key)
       {
           string s_encryped = string.Empty;
           byte[] crypto, encrypted;
           ICryptoTransform ct;

           try
           {
               crypto = string2Byte(s_crypto);
               m_aesCryptoServiceProvider.Key = key;
               m_aesCryptoServiceProvider.IV = _IV;
               ct = m_aesCryptoServiceProvider.CreateEncryptor();
               encrypted = ct.TransformFinalBlock(crypto, 0, crypto.Length);
               if (m_containKey)
               {
                   s_encryped += byte2HexString(key);
               }
               s_encryped += byte2HexString(encrypted);
               return s_encryped;
           }
           catch (Exception ex)
           {
               m_message = ex.ToString();
               return RET_ERROR;
           }
       }

       private string Decrypt(string s_encrypted, byte[] key)
       {
           string s_decrypted = string.Empty;
           byte[] encrypted, decrypted;
           ICryptoTransform ct;

           try
           {
               encrypted = hexString2Byte(s_encrypted);
               m_aesCryptoServiceProvider.Key = key;
               m_aesCryptoServiceProvider.IV = _IV;
               ct = m_aesCryptoServiceProvider.CreateDecryptor();
               decrypted = ct.TransformFinalBlock(encrypted, 0, encrypted.Length);
               s_decrypted += byte2String(decrypted);
               return s_decrypted;
           }
           catch (Exception ex)
           {
               m_message = ex.ToString();
               m_message = "Decrypt fail.";
               return RET_ERROR;
           }
       }
       #region 指定密钥对明文进行AES加密、解密
       /// <summary>
       /// 指定密钥对明文进行AES加密
       /// </summary>
       /// <param name="s_crypto">明文</param>
       /// <param name="s_key">加密密钥</param>
       /// <returns></returns>
       public string Encrypt(string s_crypto, string s_key)
       {
           byte[] key = new byte[CRYPTO_KEY_LENGTH];

           byte[] temp = string2Byte(s_key);
           if (temp.Length > key.Length)
           {
               m_message = "Key too long,need less than 32 Bytes key.";
               return RET_ERROR;
           }
           key = string2Byte(s_key.PadRight(key.Length));
           return Encrypt(s_crypto, key);
       }
       /// <summary>
       /// 指定密钥,并对密文进行解密
       /// </summary>
       /// <param name="s_encrypted">密文</param>
       /// <param name="s_key">密钥</param>
       /// <returns></returns>
       public string Decrypt(string s_encrypted, string s_key)
       {
           byte[] key = new byte[CRYPTO_KEY_LENGTH];

           byte[] temp = string2Byte(s_key);
           if (temp.Length > key.Length)
           {
               m_message = "Key invalid.too long,need less than 32 Bytes";
               return RET_ERROR;
           }
           key = string2Byte(s_key.PadRight(key.Length));
           if (m_containKey)
           {
               s_encrypted = s_encrypted.Substring(CRYPTO_KEY_LENGTH * 2);
           }
           return Decrypt(s_encrypted, key);
       }
       #endregion

       #region 动态生成密钥,并对明文进行AES加密、解密
       /// <summary>
       /// 动态生成密钥,并对明文进行AES加密
       /// </summary>
       /// <param name="s_crypto">明文</param>
       /// <returns></returns>
       public string Encrypt(string s_crypto)
       {
           byte[] key = new byte[CRYPTO_KEY_LENGTH];

           m_aesCryptoServiceProvider.GenerateKey();
           key = m_aesCryptoServiceProvider.Key;
           return Encrypt(s_crypto, key);
       }
       /// <summary>
       /// 从密文中解析出密钥,并对密文进行解密
       /// </summary>
       /// <param name="s_encrypted">密文</param>
       /// <returns></returns>
       public string Decrypt(string s_encrypted)
       {
           string s_key = string.Empty;
           byte[] key = new byte[CRYPTO_KEY_LENGTH];

           if (s_encrypted.Length <= CRYPTO_KEY_LENGTH * 2)
           {
               m_message = "Encrypted string invalid.";
               return RET_ERROR;
           }
           if (m_containKey)
           {
               s_key = s_encrypted.Substring(0, CRYPTO_KEY_LENGTH * 2);
               s_encrypted = s_encrypted.Substring(CRYPTO_KEY_LENGTH * 2);
           }
           key = hexString2Byte(s_key);
           return Decrypt(s_encrypted, key);
       }
       #endregion

       #region 私有方法
       private string byte2HexString(byte[] bytes)
       {
           StringBuilder sb = new StringBuilder();
           foreach (byte b in bytes)
           {
               sb.AppendFormat("{0:X2}", b);
           }
           return sb.ToString();
       }
       private byte[] hexString2Byte(string hex)
       {
           int len = hex.Length / 2;
           byte[] bytes = new byte[len];
           for (int i = 0; i < len; i++)
           {
               bytes[i] = (byte)(Convert.ToInt32(hex.Substring(i * 2, 2), 16));
           }
           return bytes;
       }
       private byte[] string2Byte(string str)
       {
           return Encoding.UTF8.GetBytes(str);
       }
       private string byte2String(byte[] bytes)
       {
           return Encoding.UTF8.GetString(bytes);
       }
       #endregion

    }
}

DES 加密算法

DES

数据加密标准(DES,Data Encryption Standard)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,是安全性比较高的一种算法,目前只有一种方法可以破解该算法,那就是穷举法。

using System;
using System.Security.Cryptography;
using System.Text;

namespace Common.CryptHelper
{
    /// <summary>
    /// DES加密/解密类。
    /// </summary>
    public class DESEncrypt
    {

        #region ========加密========

        /// <summary>
        /// 加密数据
        /// </summary>
        /// <param name="Text"></param>
        /// <param name="sKey"></param>
        /// <returns></returns>
        public static string Encrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] inputByteArray;
            inputByteArray = Encoding.Default.GetBytes(Text);
            des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            StringBuilder ret = new StringBuilder();
            foreach (byte b in ms.ToArray())
            {
                ret.AppendFormat("{0:X2}", b);
            }
            return ret.ToString();
        }

        #endregion

        #region ========解密========

        /// <summary>
        /// 解密数据
        /// </summary>
        /// <param name="Text"></param>
        /// <param name="sKey"></param>
        /// <returns></returns>
        public static string Decrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            int len;
            len = Text.Length / 2;
            byte[] inputByteArray = new byte[len];
            int x, i;
            for (x = 0; x < len; x++)
            {
                i = Convert.ToInt32(Text.Substring(x * 2, 2), 16);
                inputByteArray[x] = (byte)i;
            }
            des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            return Encoding.Default.GetString(ms.ToArray());
        }

        #endregion

    }
}

DES 加密算法

RSA

RSA是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被完全攻破。今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。

using System;
using System.Text;
using System.Security.Cryptography;
namespace Common.CryptHelper
{
    /// <summary>
    /// RSA加密解密及RSA签名和验证
    /// </summary>
    public class RSACryption
    {
        public RSACryption()
        {
        } 

        #region RSA 加密解密 

        #region RSA 的密钥产生 

        /// <summary>
        /// RSA 的密钥产生 产生私钥 和公钥
        /// </summary>
        /// <param name="xmlKeys"></param>
        /// <param name="xmlPublicKey"></param>
        public void RSAKey(out string xmlKeys,out string xmlPublicKey)
        {
                System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
                xmlKeys=rsa.ToXmlString(true);
                xmlPublicKey = rsa.ToXmlString(false);
        }
        #endregion 

        #region RSA的加密函数
        //##############################################################################
        //RSA 方式加密
        //说明KEY必须是XML的行式,返回的是字符串
        //在有一点需要说明!!该加密方式有 长度 限制的!!
        //############################################################################## 

        //RSA的加密函数  string
        public string RSAEncrypt(string xmlPublicKey,string m_strEncryptString )
        { 

            byte[] PlainTextBArray;
            byte[] CypherTextBArray;
            string Result;
            RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
            rsa.FromXmlString(xmlPublicKey);
            PlainTextBArray = (new UnicodeEncoding()).GetBytes(m_strEncryptString);
            CypherTextBArray = rsa.Encrypt(PlainTextBArray, false);
            Result=Convert.ToBase64String(CypherTextBArray);
            return Result; 

        }
        //RSA的加密函数 byte[]
        public string RSAEncrypt(string xmlPublicKey,byte[] EncryptString )
        { 

            byte[] CypherTextBArray;
            string Result;
            RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
            rsa.FromXmlString(xmlPublicKey);
            CypherTextBArray = rsa.Encrypt(EncryptString, false);
            Result=Convert.ToBase64String(CypherTextBArray);
            return Result; 

        }
        #endregion 

        #region RSA的解密函数
        //RSA的解密函数  string
        public string RSADecrypt(string xmlPrivateKey, string m_strDecryptString )
        {
            byte[] PlainTextBArray;
            byte[] DypherTextBArray;
            string Result;
            System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
            rsa.FromXmlString(xmlPrivateKey);
            PlainTextBArray =Convert.FromBase64String(m_strDecryptString);
            DypherTextBArray=rsa.Decrypt(PlainTextBArray, false);
            Result=(new UnicodeEncoding()).GetString(DypherTextBArray);
            return Result; 

        } 

        //RSA的解密函数  byte
        public string RSADecrypt(string xmlPrivateKey, byte[] DecryptString )
        {
            byte[] DypherTextBArray;
            string Result;
            System.Security.Cryptography.RSACryptoServiceProvider rsa=new RSACryptoServiceProvider();
            rsa.FromXmlString(xmlPrivateKey);
            DypherTextBArray=rsa.Decrypt(DecryptString, false);
            Result=(new UnicodeEncoding()).GetString(DypherTextBArray);
            return Result; 

        }
        #endregion 

        #endregion 

        #region RSA数字签名 

        #region 获取Hash描述表
        //获取Hash描述表
        public bool GetHash(string m_strSource, ref byte[] HashData)
        {
            //从字符串中取得Hash描述
            byte[] Buffer;
            System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");
            Buffer = System.Text.Encoding.GetEncoding("GB2312").GetBytes(m_strSource);
            HashData = MD5.ComputeHash(Buffer); 

            return true;
        } 

        //获取Hash描述表
        public bool GetHash(string m_strSource, ref string strHashData)
        { 

            //从字符串中取得Hash描述
            byte[] Buffer;
            byte[] HashData;
            System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");
            Buffer = System.Text.Encoding.GetEncoding("GB2312").GetBytes(m_strSource);
            HashData = MD5.ComputeHash(Buffer); 

            strHashData = Convert.ToBase64String(HashData);
            return true; 

        } 

        //获取Hash描述表
        public bool GetHash(System.IO.FileStream objFile, ref byte[] HashData)
        { 

            //从文件中取得Hash描述
            System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");
            HashData = MD5.ComputeHash(objFile);
            objFile.Close(); 

            return true; 

        } 

        //获取Hash描述表
        public bool GetHash(System.IO.FileStream objFile, ref string strHashData)
        { 

            //从文件中取得Hash描述
            byte[] HashData;
            System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");
            HashData = MD5.ComputeHash(objFile);
            objFile.Close(); 

            strHashData = Convert.ToBase64String(HashData); 

            return true; 

        }
        #endregion 

        #region RSA签名
        //RSA签名
        public bool SignatureFormatter(string p_strKeyPrivate, byte[] HashbyteSignature, ref byte[] EncryptedSignatureData)
        { 

                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); 

                RSA.FromXmlString(p_strKeyPrivate);
                System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);
                //设置签名的算法为MD5
                RSAFormatter.SetHashAlgorithm("MD5");
                //执行签名
                EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature); 

                return true; 

        } 

        //RSA签名
        public bool SignatureFormatter(string p_strKeyPrivate, byte[] HashbyteSignature, ref string m_strEncryptedSignatureData)
        { 

                byte[] EncryptedSignatureData; 

                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); 

                RSA.FromXmlString(p_strKeyPrivate);
                System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);
                //设置签名的算法为MD5
                RSAFormatter.SetHashAlgorithm("MD5");
                //执行签名
                EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature); 

                m_strEncryptedSignatureData = Convert.ToBase64String(EncryptedSignatureData); 

                return true; 

        } 

        //RSA签名
        public bool SignatureFormatter(string p_strKeyPrivate, string m_strHashbyteSignature, ref byte[] EncryptedSignatureData)
        { 

                byte[] HashbyteSignature; 

                HashbyteSignature = Convert.FromBase64String(m_strHashbyteSignature);
                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); 

                RSA.FromXmlString(p_strKeyPrivate);
                System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);
                //设置签名的算法为MD5
                RSAFormatter.SetHashAlgorithm("MD5");
                //执行签名
                EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature); 

                return true; 

        } 

        //RSA签名
        public bool SignatureFormatter(string p_strKeyPrivate, string m_strHashbyteSignature, ref string m_strEncryptedSignatureData)
        { 

                byte[] HashbyteSignature;
                byte[] EncryptedSignatureData; 

                HashbyteSignature = Convert.FromBase64String(m_strHashbyteSignature);
                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); 

                RSA.FromXmlString(p_strKeyPrivate);
                System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);
                //设置签名的算法为MD5
                RSAFormatter.SetHashAlgorithm("MD5");
                //执行签名
                EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature); 

                m_strEncryptedSignatureData = Convert.ToBase64String(EncryptedSignatureData); 

                return true; 

        }
        #endregion 

        #region RSA 签名验证 

        public bool SignatureDeformatter(string p_strKeyPublic, byte[] HashbyteDeformatter, byte[] DeformatterData)
        { 

                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); 

                RSA.FromXmlString(p_strKeyPublic);
                System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);
                //指定解密的时候HASH算法为MD5
                RSADeformatter.SetHashAlgorithm("MD5"); 

                if(RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData))
                {
                    return true;
                }
                else
                {
                    return false;
                } 

        } 

        public bool SignatureDeformatter(string p_strKeyPublic, string p_strHashbyteDeformatter, byte[] DeformatterData)
        { 

                byte[] HashbyteDeformatter; 

                HashbyteDeformatter = Convert.FromBase64String(p_strHashbyteDeformatter); 

                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); 

                RSA.FromXmlString(p_strKeyPublic);
                System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);
                //指定解密的时候HASH算法为MD5
                RSADeformatter.SetHashAlgorithm("MD5"); 

                if(RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData))
                {
                    return true;
                }
                else
                {
                    return false;
                } 

        } 

        public bool SignatureDeformatter(string p_strKeyPublic, byte[] HashbyteDeformatter, string p_strDeformatterData)
        { 

                byte[] DeformatterData; 

                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); 

                RSA.FromXmlString(p_strKeyPublic);
                System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);
                //指定解密的时候HASH算法为MD5
                RSADeformatter.SetHashAlgorithm("MD5"); 

                DeformatterData =Convert.FromBase64String(p_strDeformatterData); 

                if(RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData))
                {
                    return true;
                }
                else
                {
                    return false;
                } 

        } 

        public bool SignatureDeformatter(string p_strKeyPublic, string p_strHashbyteDeformatter, string p_strDeformatterData)
        { 

                byte[] DeformatterData;
                byte[] HashbyteDeformatter; 

                HashbyteDeformatter = Convert.FromBase64String(p_strHashbyteDeformatter);
                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider(); 

                RSA.FromXmlString(p_strKeyPublic);
                System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);
                //指定解密的时候HASH算法为MD5
                RSADeformatter.SetHashAlgorithm("MD5"); 

                DeformatterData =Convert.FromBase64String(p_strDeformatterData); 

                if(RSADeformatter.VerifySignature(HashbyteDeformatter,DeformatterData))
                {
                    return true;
                }
                else
                {
                    return false;
                } 

        } 

        #endregion 

        #endregion 

    }
}

RSA加密算法

HASTable

using System;
using System.Text;
using System.Security.Cryptography;
namespace Common.CryptHelper
{
    /// <summary>
    /// 得到随机安全码(哈希加密)。
    /// </summary>
    public class HashEncode
    {
        public HashEncode()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }
        /// <summary>
        /// 得到随机哈希加密字符串
        /// </summary>
        /// <returns></returns>
        public static string GetSecurity()
        {
            string Security = HashEncoding(GetRandomValue());
            return Security;
        }
        /// <summary>
        /// 得到一个随机数值
        /// </summary>
        /// <returns></returns>
        public static string GetRandomValue()
        {
            Random Seed = new Random();
            string RandomVaule = Seed.Next(1, int.MaxValue).ToString();
            return RandomVaule;
        }
        /// <summary>
        /// 哈希加密一个字符串
        /// </summary>
        /// <param name="Security"></param>
        /// <returns></returns>
        public static string HashEncoding(string Security)
        {
            byte[] Value;
            UnicodeEncoding Code = new UnicodeEncoding();
            byte[] Message = Code.GetBytes(Security);
            SHA512Managed Arithmetic = new SHA512Managed();
            Value = Arithmetic.ComputeHash(Message);
            Security = "";
            foreach(byte o in Value)
            {
                Security += (int) o + "O";
            }
            return Security;
        }
    }
}

本文转载自  http://yuangang.cnblogs.com

时间: 2024-10-12 14:57:28

常用的一些加密算法,留着以备不时之需的相关文章

java中常用的数据加密算法

以下为加密的工具类: import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; impo

实现jsp页面两级列表的显示(Map 传值到Jsp 页面;Map去key 和 value 的方法; 实例记载,备不时之需。

Action: List.vm 页面效果: 实现jsp页面两级列表的显示(Map 传值到Jsp 页面;Map去key 和 value 的方法: 实例记载,备不时之需.

datetime各种处理。记录下,备不时之需。

1. 获取某段日期范围内的所有日期 /// <summary>    /// 获取某段日期范围内的所有日期,以数组形式返回     /// </summary>     /// <param name="dt1">开始日期</param>     /// <param name="dt2">结束日期</param>     /// <returns></returns>

Axure 7.0 常用函数记录 自留

Math函数 Abs:绝对值函数,使用方法 [[Math.Abs(-1)]],返回值1; ceil:返回小数向上最接近的整数,使用方法[[Math.ceil(1.5)]],返回值2: floor:返回小数向下最接近的整数,使用方法[[Math.floor(1.5)]],返回值1: max:返回一个最大数值,使用方法[[Math.max(1,5,5.3,2,4)]],返回值5.3: min:返回一个最小数值,使用方法[[Math.min(1,5,5.3,2,4)]],返回值1: pow:幂函数,使

备份3个判断指针是否有效的函数,以备不时之需

BOOLEAN MmIsAddressValid( _In_  PVOID VirtualAddress ); Parameters VirtualAddress [in] A pointer to the nonpaged virtual address to check. The caller must ensure that this  address cannot be paged out or deleted for the duration of this call. Even af

以前写的抽奖小程序,备忘下以备不时之需。

界面其丑无比.......很少写winform程序...... 链接: http://pan.baidu.com/s/1gdpnimf 密码: 49bd

运算符优先级(以备不时之需)

优先级 描述 运算符 1 括号 ().[] 2 正负号 +.- 3 自增自减,非 ++.--.! 4 乘除,取余 *./.% 5 加减 +.- 6 移位运算 <<.>>.>>> 7 大小关系 >.>=.<.<= 8 相等关系 ==.!= 9 按位与 & 10 按位异或 ^ 11 按位或 | 12 逻辑与 && 13 逻辑或 || 14 条件运算 ?: 15 赋值运算 =.+=.-=.*=./=.%= 16 位赋值运算

EditPlus常用正则表达式

正则表达式(Regular Expression,在代码中常简写为regex.regexp或RE)是计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本.许多程序设计语言都支持利用正则表达式进行字符串操作.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 正则表达式是一个查询的字符串,它包含一般的字符和一些特殊的字符,特殊字符可以扩展查找字符串的能力,正则表达式

ApexSql Log使用体会

今天碰到一条基础数据被删除导致报错,远程到服务器,刚好前几天有恢复一个备份库,找到那条记录手动插回去先解决了. 其它地区也偶有发生这种情况,数据莫名丢失,应该是被误删的.我们这边系统如果有删除是有做日志的,检查日志表没发现操作,可能是同事的系统或存储过程造成的. 找了一些数据库工具,Log Explorer听说不错,但好像只支持到SQL2005 新版本的有个叫ApexSql Log的可以支持,官网有试用版,最新版是2016.3. 网上教程实在太少太少了,偶尔几篇还是抄来抄去的,好在有个高手(ES