C#加密算法汇总

方法一:

    //须添加对System.Web的引用

    using System.Web.Security;

    

    ...

    

    /// <summary>

    /// SHA1加密字符串

    /// </summary>

    /// <param name="source">源字符串</param>

    /// <returns>加密后的字符串</returns>

    public string SHA1(string source)

    {

        return FormsAuthentication.HashPasswordForStoringInConfigFile(source, "SHA1");

    }

    /// <summary>

    /// MD5加密字符串

    /// </summary>

    /// <param name="source">源字符串</param>

    /// <returns>加密后的字符串</returns>

    public string MD5(string source)

    {

        return FormsAuthentication.HashPasswordForStoringInConfigFile(source, "MD5");;

    }


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

方法二(可逆加密解密):

    using System.Security.Cryptography;

    

    ...

    

    public string Encode(string data)

    {

        byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);

        byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);

    

        DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();

        int i = cryptoProvider.KeySize;

        MemoryStream ms = new MemoryStream();

        CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);

    

        StreamWriter sw = new StreamWriter(cst);

        sw.Write(data);

        sw.Flush();

        cst.FlushFinalBlock();

        sw.Flush();

        return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);

    

    }

    

    public string Decode(string data)

    {

        byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);

        byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);

    

        byte[] byEnc;

        try

        {

            byEnc = Convert.FromBase64String(data);

        }

        catch

        {

            return null;

        }

    

        DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();

        MemoryStream ms = new MemoryStream(byEnc);

        CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);

        StreamReader sr = new StreamReader(cst);

        return sr.ReadToEnd();

    }


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

方法三(MD5不可逆):

    using System.Security.Cryptography;

    

    ...

    

    //MD5不可逆加密

    

    //32位加密

    

    public string GetMD5_32(string s, string _input_charset)

    {

        MD5 md5 = new MD5CryptoServiceProvider();

        byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s));

        StringBuilder sb = new StringBuilder(32);

        for (int i = 0; i < t.Length; i++)

        {

            sb.Append(t[i].ToString("x").PadLeft(2, ‘0‘));

        }

        return sb.ToString();

    }

    

    //16位加密

    public static string GetMd5_16(string ConvertString)

    {

        MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

        string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4, 8);

        t2 = t2.Replace("-", "");

        return t2;

    }


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

方法四(对称加密):

    using System.IO;

    using System.Security.Cryptography;

    

    ...

    

    private SymmetricAlgorithm mobjCryptoService;

    private string Key;

    /// <summary>   

    /// 对称加密类的构造函数   

    /// </summary>   

    public SymmetricMethod()

    {

        mobjCryptoService = new RijndaelManaged();

        Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";

    }

    /// <summary>   

    /// 获得密钥   

    /// </summary>   

    /// <returns>密钥</returns>   

    private byte[] GetLegalKey()

    {

        string sTemp = Key;

        mobjCryptoService.GenerateKey();

        byte[] bytTemp = mobjCryptoService.Key;

        int KeyLength = bytTemp.Length;

        if (sTemp.Length > KeyLength)

            sTemp = sTemp.Substring(0, KeyLength);

        else if (sTemp.Length < KeyLength)

            sTemp = sTemp.PadRight(KeyLength, ‘ ‘);

        return ASCIIEncoding.ASCII.GetBytes(sTemp);

    }

    /// <summary>   

    /// 获得初始向量IV   

    /// </summary>   

    /// <returns>初试向量IV</returns>   

    private byte[] GetLegalIV()

    {

        string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";

        mobjCryptoService.GenerateIV();

        byte[] bytTemp = mobjCryptoService.IV;

        int IVLength = bytTemp.Length;

        if (sTemp.Length > IVLength)

            sTemp = sTemp.Substring(0, IVLength);

        else if (sTemp.Length < IVLength)

            sTemp = sTemp.PadRight(IVLength, ‘ ‘);

        return ASCIIEncoding.ASCII.GetBytes(sTemp);

    }

    /// <summary>   

    /// 加密方法   

    /// </summary>   

    /// <param name="Source">待加密的串</param>   

    /// <returns>经过加密的串</returns>   

    public string Encrypto(string Source)

    {

        byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);

        MemoryStream ms = new MemoryStream();

        mobjCryptoService.Key = GetLegalKey();

        mobjCryptoService.IV = GetLegalIV();

        ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();

        CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);

        cs.Write(bytIn, 0, bytIn.Length);

        cs.FlushFinalBlock();

        ms.Close();

        byte[] bytOut = ms.ToArray();

        return Convert.ToBase64String(bytOut);

    }

    /// <summary>   

    /// 解密方法   

    /// </summary>   

    /// <param name="Source">待解密的串</param>   

    /// <returns>经过解密的串</returns>   

    public string Decrypto(string Source)

    {

        byte[] bytIn = Convert.FromBase64String(Source);

        MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);

        mobjCryptoService.Key = GetLegalKey();

        mobjCryptoService.IV = GetLegalIV();

        ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();

        CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);

        StreamReader sr = new StreamReader(cs);

        return sr.ReadToEnd();

    }


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

方法五:

    using System.IO;

    using System.Security.Cryptography;

    using System.Text;

    

    ...

    

    //默认密钥向量

    private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };

    /// <summary>

    /// DES加密字符串

    /// </summary>

    /// <param name="encryptString">待加密的字符串</param>

    /// <param name="encryptKey">加密密钥,要求为8位</param>

    /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>

    public static string EncryptDES(string encryptString, string encryptKey)

    {

        try

        {

            byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));

            byte[] rgbIV = Keys;

            byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);

            DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();

            MemoryStream mStream = new MemoryStream();

            CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);

            cStream.Write(inputByteArray, 0, inputByteArray.Length);

            cStream.FlushFinalBlock();

            return Convert.ToBase64String(mStream.ToArray());

        }

        catch

        {

            return encryptString;

        }

    }

    

    /// <summary>

    /// DES解密字符串

    /// </summary>

    /// <param name="decryptString">待解密的字符串</param>

    /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>

    /// <returns>解密成功返回解密后的字符串,失败返源串</returns>

    public static string DecryptDES(string decryptString, string decryptKey)

    {

        try

        {

            byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);

            byte[] rgbIV = Keys;

            byte[] inputByteArray = Convert.FromBase64String(decryptString);

            DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();

            MemoryStream mStream = new MemoryStream();

            CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);

            cStream.Write(inputByteArray, 0, inputByteArray.Length);

            cStream.FlushFinalBlock();

            return Encoding.UTF8.GetString(mStream.ToArray());

        }

        catch

        {

            return decryptString;

        }

    }


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

方法六(文件加密):

    using System.IO;

    using System.Security.Cryptography;

    using System.Text;

    

    ...

    

    //加密文件

    private static void EncryptData(String inName, String outName, byte[] desKey, byte[] desIV)

    {

        //Create the file streams to handle the input and output files.

        FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);

        FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);

        fout.SetLength(0);

    

        //Create variables to help with read and write.

        byte[] bin = new byte[100]; //This is intermediate storage for the encryption.

        long rdlen = 0;              //This is the total number of bytes written.

        long totlen = fin.Length;    //This is the total length of the input file.

        int len;                     //This is the number of bytes to be written at a time.

    

        DES des = new DESCryptoServiceProvider();

        CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write);

    

        //Read from the input file, then encrypt and write to the output file.

        while (rdlen < totlen)

        {

            len = fin.Read(bin, 0, 100);

            encStream.Write(bin, 0, len);

            rdlen = rdlen + len;

        }

    

        encStream.Close();

        fout.Close();

        fin.Close();

    }

    

    //解密文件

    private static void DecryptData(String inName, String outName, byte[] desKey, byte[] desIV)

    {

        //Create the file streams to handle the input and output files.

        FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);

        FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);

        fout.SetLength(0);

    

        //Create variables to help with read and write.

        byte[] bin = new byte[100]; //This is intermediate storage for the encryption.

        long rdlen = 0;              //This is the total number of bytes written.

        long totlen = fin.Length;    //This is the total length of the input file.

        int len;                     //This is the number of bytes to be written at a time.

    

        DES des = new DESCryptoServiceProvider();

        CryptoStream encStream = new CryptoStream(fout, des.CreateDecryptor(desKey, desIV), CryptoStreamMode.Write);

    

        //Read from the input file, then encrypt and write to the output file.

        while (rdlen < totlen)

        {

            len = fin.Read(bin, 0, 100);

            encStream.Write(bin, 0, len);

            rdlen = rdlen + len;

        }

    

        encStream.Close();

        fout.Close();

        fin.Close();

}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

using System;

using System.Security.Cryptography;//这个是处理文字编码的前提

using System.Text;

using System.IO;

/// <summary>

/// DES加密方法

/// </summary>

/// <param name="strPlain">明文</param>

/// <param name="strDESKey">密钥</param>

/// <param name="strDESIV">向量</param>

/// <returns>密文</returns>

public string DESEncrypt(string strPlain,string strDESKey,string strDESIV)

{

 //把密钥转换成字节数组

 byte[] bytesDESKey=ASCIIEncoding.ASCII.GetBytes(strDESKey);

 //把向量转换成字节数组

 byte[] bytesDESIV=ASCIIEncoding.ASCII.GetBytes(strDESIV);

 //声明1个新的DES对象

 DESCryptoServiceProvider desEncrypt=new DESCryptoServiceProvider();

 //开辟一块内存流

 MemoryStream msEncrypt=new MemoryStream();

 //把内存流对象包装成加密流对象

 CryptoStream csEncrypt=new CryptoStream(msEncrypt,desEncrypt.CreateEncryptor(bytesDESKey,bytesDESIV),CryptoStreamMode.Write);

 //把加密流对象包装成写入流对象

 StreamWriter swEncrypt=new StreamWriter(csEncrypt);

 //写入流对象写入明文

 swEncrypt.WriteLine(strPlain);

 //写入流关闭

 swEncrypt.Close();

 //加密流关闭

 csEncrypt.Close();

 //把内存流转换成字节数组,内存流现在已经是密文了

 byte[] bytesCipher=msEncrypt.ToArray();

 //内存流关闭

 msEncrypt.Close();

 //把密文字节数组转换为字符串,并返回

 return UnicodeEncoding.Unicode.GetString(bytesCipher);

}

/// <summary>

/// DES解密方法

/// </summary>

/// <param name="strCipher">密文</param>

/// <param name="strDESKey">密钥</param>

/// <param name="strDESIV">向量</param>

/// <returns>明文</returns>

public string DESDecrypt(string strCipher,string strDESKey,string strDESIV)

{

 //把密钥转换成字节数组

 byte[] bytesDESKey=ASCIIEncoding.ASCII.GetBytes(strDESKey);

 //把向量转换成字节数组

 byte[] bytesDESIV=ASCIIEncoding.ASCII.GetBytes(strDESIV);

 //把密文转换成字节数组

 byte[] bytesCipher=UnicodeEncoding.Unicode.GetBytes(strCipher);

 //声明1个新的DES对象

 DESCryptoServiceProvider desDecrypt=new DESCryptoServiceProvider();

 //开辟一块内存流,并存放密文字节数组

 MemoryStream msDecrypt=new MemoryStream(bytesCipher);

 //把内存流对象包装成解密流对象

 CryptoStream csDecrypt=new CryptoStream(msDecrypt,desDecrypt.CreateDecryptor(bytesDESKey,bytesDESIV),CryptoStreamMode.Read);

 //把解密流对象包装成读出流对象

 StreamReader srDecrypt=new StreamReader(csDecrypt);

 //明文=读出流的读出内容

 string strPlainText=srDecrypt.ReadLine();

 //读出流关闭

 srDecrypt.Close();

 //解密流关闭

 csDecrypt.Close();

 //内存流关闭

 msDecrypt.Close();

 //返回明文

 return strPlainText;

}

时间: 2024-10-18 10:06:39

C#加密算法汇总的相关文章

C#加密算法汇总(转载)http://www.cnblogs.com/zengxiangzhan/archive/2010/01/30/1659687.html

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 方法一:     //须添加对System.Web的引用     using System.Web.Security;          ...          /// <summary>     /// SHA1加密字符串     /// </summary>     /// <param name="source"

mysql启动参数(/etc/my.cnf)详解汇总

在linux下面的/etc/my.cnf的参数详解汇总 MYSQL–my.cnf配置中文详解 basedir = path   使用给定目录作为根目录(安装目录). character-sets-dir = path   给出存放着字符集的目录. datadir = path   从给定目录读取数据库文件. pid-file = filename   为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统); Init-V脚本需要使用这个文件里的进程ID结束mysqld进

5.1-5.31推荐文章汇总

5.1-5.31推荐文章汇总 [移动开发] Android Volley完全解析(三),定制自己的Request guolin 雄踞AppStore榜首的游戏<别踩到白块儿>源代码分析和下载(一)touchsnow Cocos2d-x3.0游戏实例之<别救我>第四篇--乱入的主角笨木头 Android-自定义图像资源的使用(2)wwj_748 Android SQLite性能分析Horky <游戏脚本的设计与开发>-(RPG部分)3.6 队员列表和人物属性vipra C

ASP.NET(C#)常用数据加密和解密方法汇总

一.            数据加密的概念 1.  基本概念 2.  基本功能 3.  加密形式 二.            数据加密的项目应用和学习 1.  媒体加密:DRM 2.  文件加密:文本加密.pdf.word 3.  数据加密:ASP.NET(C#)中的数据加密 4.  硬件加密:加密狗 三.            数据加密的发展趋势 四.            网络数据加密算法分类 1.  根本不考虑解密问题:MD5. 2.  私用密钥加密:DES.AES 3.  公用密钥加密:

android开发中遇到的问题汇总【二】

36.代码规范 http://liuzhichao.com/p/1781.html#more-1781 // Disallow Parent Intercept, just in case ViewParent parent = getParent(); if (parent != null) { parent.requestDisallowInterceptTouchEvent(true); } 38.在纯属布局中,将除最底部以外的的view都设置weight为1就可以了. 39.editvi

linux基础命令汇总

说明 本文仅仅对一些基础命令做演示,不涉及过多的原理性,以及概念性的东西, 示例中仅仅列出常用的选项,对于不常用的选项不做介绍以及演示. 其中部分帮助信息是来源于man查寻结果,未作翻译,请谅解. enable(内置命令) 命令示例 enable -a 显示所有激活和禁用的内置命令 enable -n 显示所有已经禁用的内置命令 enable -n echo 禁用内置命令 echo 命令演示 禁用命令 [[email protected] ~]#enable -n echo [[email pr

【Oracle】 RMAN命令汇总

RMAN命令汇总 2013年写了关于RMAN命令的汇总,先转换为MD文档,温故而知新. 1.进入RMAN 进入本地数据库 [[email protected] ~]$ rman target / 进入远程数据库 [[email protected] ~]$ rman target zsd/[email protected]_1.9 使用日志功能 [[email protected] logs]$ rman target / msglog /data/backup/logs/full_dbback

一网打尽!每个程序猿都该了解的黑客技术大汇总

原文:一网打尽!每个程序猿都该了解的黑客技术大汇总 上面这个段子估计很多朋友都看过,程序员被黑过无数次,在其他人眼中,仿佛我们需要写得了木马,翻得了围墙,修得了电脑,找得到资源,但凡是跟计算机沾点边的,咱都得会才行. 段子归段子,言归正传,对于咱们程序员来说,多多少少了解一些信息安全的技术知识还是大有裨益的,不仅能了解一些计算机和网络的底层原理,也能反哺我们的开发工作,带着安全思维编程,减少漏洞的产生. 本文内容: - 网络安全 - SQL注入 - XSS攻击 - CSRF攻击 - DDoS攻击

部署OpenStack问题汇总(四)--openstack中nova-compute状态status显示为&#39;XXX&#39;的问题

第一次部署openstack的时候就遇见了这个问题,当时的版本是havana, 现在部署essex的时候又遇到了这个问题,经过一番折腾,解决了这个问题,记录下来,以免以后忘记. =========================================================== 1.查看/var/log/nova/nova-compute.log文件其中出现了这样的情况: Domain not found: no domain with matching name 'insta