C#加解密

简介: MD5://Winform:public static string StringToMD5Hash(string inputString) { MD5CryptoSer...

MD5:

//Winform:
public static string StringToMD5Hash(string inputString)  
{  
    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();  
    byte[] encryptedBytes = md5.ComputeHash(Encoding.ASCII.GetBytes(inputString));  
    StringBuilder sb = new StringBuilder();  
    for (int i = 0; i < encryptedBytes.Length; i++)  
    {  
        sb.AppendFormat("{0:x2}", encryptedBytes[i]);  

    }  
    return sb.ToString();  
} 

//Webform:
public static string md5(string pwd)
{  
    string md5pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "MD5");  
    return md5pwd;  
} 


Base64:

这种编码方式,我曾经在一个项目中用到过,当时的情况是将图片字节数组转化为Base64编码,当时在图片字节转base64编码这个帖子中进行了讨论。这里只给出C#中的实现。

关键代码如下:

DataRow dr = ds.Tables["temp_pic"].Rows[0];
byte[] buffer = (byte[])dr["imagedata1"];
//string base64Str = Convert.ToBase64String(bytes);
//byte[] buffer = Convert.FromBase64String(base64Str);
MemoryStream ms2 = new MemoryStream(buffer, 0, buffer.Length);
ms2.Seek(0, SeekOrigin.Begin);
Image image2 = Image.FromStream(ms2);
pictureBox1.Image = image2;

DES:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string result = DESStr("guwei4037");
            Console.WriteLine("这是你的加密结果:{0}", result);//1tE8zvi9ouQJNb4FlxlKFQ==

            string src = FromDESStr(result);
            Console.WriteLine("这是我的解密结果:{0}", src);//guwei4037
        }

        /// <summary>
        /// DES加密
        /// </summary>
        /// <param name="src"></param>
        /// <returns></returns>
        public static string DESStr(string src)
        {
            string des = string.Empty;
            byte[] bysData = Encoding.UTF8.GetBytes(src);

            DESCryptoServiceProvider objDESCryptoServiceProvider = new DESCryptoServiceProvider();
            objDESCryptoServiceProvider.Key = Encoding.ASCII.GetBytes("12345678");//密钥
            objDESCryptoServiceProvider.Mode = CipherMode.ECB;
            objDESCryptoServiceProvider.Padding = PaddingMode.None;

            byte[] bysFixSizeData = new byte[(int)Math.Ceiling(bysData.Length / 8.0) * 8];
            Array.Copy(bysData, bysFixSizeData, bysData.Length);

            byte[] bysEncrypted = objDESCryptoServiceProvider.CreateEncryptor().TransformFinalBlock(bysFixSizeData, 0, bysFixSizeData.Length);//加密
            des = Convert.ToBase64String(bysEncrypted);//加密后的字符串
            if (des.Equals("")) des = "error";
            return des;
        }

        /// <summary>
        /// DES解密
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string FromDESStr(string str)
        {
            string des = string.Empty;
            byte[] inputByteArray = Convert.FromBase64String(str);

            DESCryptoServiceProvider objDESCryptoServiceProvider = new DESCryptoServiceProvider();
            objDESCryptoServiceProvider.Key = Encoding.ASCII.GetBytes("12345678");//密钥
            objDESCryptoServiceProvider.Mode = CipherMode.ECB;
            objDESCryptoServiceProvider.Padding = PaddingMode.None;

            byte[] bysDEcrypted = objDESCryptoServiceProvider.CreateDecryptor().TransformFinalBlock(inputByteArray, 0, inputByteArray.Length);//解密
            byte[] bysFixSizeData = new byte[(int)Math.Ceiling(bysDEcrypted.Length / 8.0) * 8];
            Array.Copy(bysDEcrypted, bysFixSizeData, bysDEcrypted.Length);

            des = Encoding.UTF8.GetString(bysFixSizeData);//解密后的字符串
            if (des.Equals("")) des = "error";
            return des;
        }
    }
}

3DES:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string dealString = DES3Encrypt("bindreport", "123456788765432112345678");
            Console.WriteLine("dealString is :{0}", dealString);//iTJd2yNItV6/d7v1sWnRBQ==

            string rawString = DES3Decrypt("iTJd2yNItV6/d7v1sWnRBQ==", "123456788765432112345678");
            Console.WriteLine("rawString is :{0}", rawString);//bindreport
        }

        /// <summary>
        /// 3DES加密
        /// </summary>
        /// <param name="data">要加密的数据</param>
        /// <param name="key">密钥</param>
        /// <returns>3DES加密结果</returns>
        public static string DES3Encrypt(string data, string key)
        {
            TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();

            DES.Key = ASCIIEncoding.ASCII.GetBytes(key);
            DES.Mode = CipherMode.ECB;
            DES.Padding = PaddingMode.PKCS7;

            ICryptoTransform DESEncrypt = DES.CreateEncryptor();

            byte[] Buffer = ASCIIEncoding.ASCII.GetBytes(data);
            return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
        }

        /// <summary>
        /// 3DES解密
        /// </summary>
        /// <param name="data">要解密的数据</param>
        /// <param name="key">密钥</param>
        /// <returns>3DES解密结果</returns>
        public static string DES3Decrypt(string data, string key)
        {
            TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();
            DES.Key = ASCIIEncoding.ASCII.GetBytes(key);
            DES.Mode = CipherMode.ECB;
            DES.Padding = System.Security.Cryptography.PaddingMode.PKCS7;

            ICryptoTransform DESDecrypt = DES.CreateDecryptor();
            byte[] Buffer = Convert.FromBase64String(data);
            return ASCIIEncoding.ASCII.GetString(DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
        }
    }
}

RSA:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            //RSA加解密
            UnicodeEncoding ByteConverter = new UnicodeEncoding();
            byte[] dataToEncrypt = ByteConverter.GetBytes("guwei4037");
            using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
            {
                byte[] encryptedData = RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false);
                byte[] decryptedData = RSADecrypt(encryptedData, RSA.ExportParameters(true), false);

                string encryptedString = Convert.ToBase64String(encryptedData);
                string decryptedString = ByteConverter.GetString(decryptedData);

                Console.WriteLine("加密后的结果为:{0}\r\n", encryptedString);
                Console.WriteLine("解密后的结果为:{0}\r\n", decryptedString);
            }

            //RAS数字签名
            RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider();
            RSAParameters Key = RSAalg.ExportParameters(true);
            byte[] signedData = HashAndSignBytes(dataToEncrypt, Key);

            if (VerifySignedHash(dataToEncrypt, signedData, Key))
            {
                Console.WriteLine("数据验证通过");
            }
        }

        /// <summary>
        /// RSA加密
        /// </summary>
        /// <param name="DataToEncrypt">要加密的数据</param>
        /// <param name="RSAKeyInfo">RSA密钥</param>
        /// <param name="DoOAEPPadding"></param>
        /// <returns></returns>
        static byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
        {
            try
            {
                using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
                {
                    RSA.ImportParameters(RSAKeyInfo);
                    return RSA.Encrypt(DataToEncrypt, DoOAEPPadding);
                }
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// RSA解密
        /// </summary>
        /// <param name="DataToDecrypt">要解密的数据</param>
        /// <param name="RSAKeyInfo">RSA密钥</param>
        /// <param name="DoOAEPPadding"></param>
        /// <returns></returns>
        static byte[] RSADecrypt(byte[] DataToDecrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
        {
            try
            {
                using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
                {
                    RSA.ImportParameters(RSAKeyInfo);
                    return RSA.Decrypt(DataToDecrypt, DoOAEPPadding);
                }
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// 进行数字签名
        /// </summary>
        /// <param name="DataToSign">要进行数字签名的数据</param>
        /// <param name="Key">RAS参数</param>
        /// <returns>数字签名结果</returns>
        static byte[] HashAndSignBytes(byte[] DataToSign, RSAParameters Key)
        {
            try
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                RSA.ImportParameters(Key);
                return RSA.SignData(DataToSign, new SHA1CryptoServiceProvider());
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// 验证数字签名
        /// </summary>
        /// <param name="DataToVerify">要进行验证的数据</param>
        /// <param name="SignedData">数字签名</param>
        /// <param name="Key">RAS参数</param>
        /// <returns>验证数字签名结果</returns>
        static bool VerifySignedHash(byte[] DataToVerify, byte[] SignedData, RSAParameters Key)
        {
            try
            {
                RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider();
                RSAalg.ImportParameters(Key);
                return RSAalg.VerifyData(DataToVerify, new SHA1CryptoServiceProvider(), SignedData);
            }
            catch
            {
                return false;
            }
        }
    }
}



目录
相关文章
|
4月前
|
算法 C# 数据安全/隐私保护
C# | AES加解密 - 快速上手
这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一 。 AES作为计算机领域最常见的通用加密算法之一,称之为对称加密算法中的一哥也丝毫不为过,其重要程度不言而喻。 本文将极尽详细的讲解C#实现AES加密和解密的全过程。
270 0
C# | AES加解密 - 快速上手
|
存储 安全 算法
C#加解密
C#加解密
144 0
|
安全 算法 C#
C# 中使用 RSA加解密算法
一、什么是RSA   RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。      在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。
2290 0
|
4月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
159 3
|
4月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
173 3