AES

  1. using System;
  2. using System.Security.Cryptography;
  3. using System.Text;
  4.  
  5. namespace Common
  6. {
  7. public class AESProvider
  8. {
  9. public static int KEYSIZE = ;
  10.  
  11. /// <summary>
  12. /// 获取随机的加密密钥
  13. /// </summary>
  14. /// <param name="Key"></param>
  15. /// <param name="IV"></param>
  16. /// <returns></returns>
  17. public static void GenerateKey(out string Key, out string IV)
  18. {
  19. Key = GenerateKey();
  20. IV = GenerateIV();
  21. }
  22.  
  23. /// <summary>
  24. /// 获取随机的加密密钥
  25. /// </summary>
  26. /// <returns></returns>
  27. public static string GenerateKey()
  28. {
  29. int n = KEYSIZE / ;
  30. char[] arrChar = new char[]{
  31. 'a','b','d','c','e','f','g','h','i','j','k','l','m','n','p','r','q','s','t','u','v','w','z','y','x',
  32. '','','','','','','','','','',
  33. 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','Q','P','R','T','S','V','U','W','X','Y','Z'
  34. };
  35.  
  36. StringBuilder num = new StringBuilder();
  37.  
  38. Random rnd = new Random();
  39. for (int i = ; i < n; i++)
  40. {
  41. num.Append(arrChar[rnd.Next(, arrChar.Length)].ToString());
  42. }
  43.  
  44. return num.ToString();
  45. }
  46.  
  47. /// <summary>
  48. /// 获取随机的初始化向量
  49. /// </summary>
  50. /// <returns></returns>
  51. public static string GenerateIV()
  52. {
  53. int n = KEYSIZE / ;
  54. char[] arrChar = new char[]{
  55. 'a','b','d','c','e','f','g','h','i','j','k','l','m','n','p','r','q','s','t','u','v','w','z','y','x',
  56. '','','','','','','','','','',
  57. 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','Q','P','R','T','S','V','U','W','X','Y','Z'
  58. };
  59.  
  60. StringBuilder num = new StringBuilder();
  61.  
  62. Random rnd = new Random(DateTime.Now.Millisecond);
  63. for (int i = ; i < n; i++)
  64. {
  65. num.Append(arrChar[rnd.Next(, arrChar.Length)].ToString());
  66. }
  67.  
  68. return num.ToString();
  69. }
  70.  
  71. /// <summary>
  72. /// AES加密
  73. /// </summary>
  74. /// <param name="TextData">待加密字符</param>
  75. /// <param name="Key">加密密钥</param>
  76. /// <param name="IV">初始化向量</param>
  77. /// <param name="CryptText">输出:已加密字符串</param>
  78. /// <returns>0:成功加密 -1:待加密字符串不为能空 -2:加密密钥不能为空 -3:初始化向量字节长度不为KEYSIZE/8 -4:其他错误</returns>
  79. public static int EncryptText(string TextData, string Key, string IV, out string CryptText)
  80. {
  81. CryptText = "";
  82. TextData = TextData.Trim();
  83. if (string.IsNullOrEmpty(TextData)) return -;
  84. if (string.IsNullOrEmpty(Key)) return -;
  85. if (string.IsNullOrEmpty(IV) || IV.Length != KEYSIZE / ) return -;
  86.  
  87. try
  88. {
  89. RijndaelManaged rijndaelCipher = new RijndaelManaged();
  90.  
  91. rijndaelCipher.Mode = CipherMode.CBC;
  92. rijndaelCipher.Padding = PaddingMode.PKCS7;
  93. rijndaelCipher.KeySize = KEYSIZE;
  94. rijndaelCipher.BlockSize = KEYSIZE;
  95.  
  96. byte[] pwdBytes = Encoding.UTF8.GetBytes(Key);
  97. byte[] ivBytes = Encoding.UTF8.GetBytes(IV);
  98.  
  99. byte[] keyBytes = new byte[KEYSIZE / ];
  100. int len = pwdBytes.Length;
  101. if (len > keyBytes.Length) len = keyBytes.Length;
  102. System.Array.Copy(pwdBytes, keyBytes, len);
  103.  
  104. rijndaelCipher.Key = keyBytes;
  105. rijndaelCipher.IV = ivBytes;
  106.  
  107. ICryptoTransform transform = rijndaelCipher.CreateEncryptor();
  108. byte[] plainText = Encoding.UTF8.GetBytes(TextData);
  109. byte[] cipherBytes = transform.TransformFinalBlock(plainText, , plainText.Length);
  110.  
  111. CryptText = Convert.ToBase64String(cipherBytes);
  112.  
  113. return ;
  114. }
  115. catch
  116. {
  117. return -;
  118. }
  119. }
  120.  
  121. /// <summary>
  122. /// AES解密
  123. /// </summary>
  124. /// <param name="CryptText">待解密字符串</param>
  125. /// <param name="Key">加密密钥</param>
  126. /// <param name="IV">初始化向量</param>
  127. /// <param name="TextData">输出:已解密的字符串</param>
  128. /// <returns>0:成功解密 -1:待解密字符串不为能空 -2:加密密钥不能为空 -3:初始化向量字节长度不为KEYSIZE/8 -4:其他错误</returns>
  129. public static int DecryptText(string CryptText, string Key, string IV, out string TextData)
  130. {
  131. TextData = "";
  132. if (string.IsNullOrEmpty(CryptText)) return -;
  133. if (string.IsNullOrEmpty(Key)) return -;
  134. if (string.IsNullOrEmpty(IV) || IV.Length != KEYSIZE / ) return -;
  135.  
  136. try
  137. {
  138. RijndaelManaged rijndaelCipher = new RijndaelManaged();
  139.  
  140. rijndaelCipher.Mode = CipherMode.CBC;
  141. rijndaelCipher.Padding = PaddingMode.PKCS7;
  142. rijndaelCipher.KeySize = KEYSIZE;
  143. rijndaelCipher.BlockSize = KEYSIZE;
  144.  
  145. byte[] encryptedData = Convert.FromBase64String(CryptText);
  146. byte[] pwdBytes = Encoding.UTF8.GetBytes(Key);
  147. byte[] ivBytes = Encoding.UTF8.GetBytes(IV);
  148.  
  149. byte[] keyBytes = new byte[KEYSIZE / ];
  150. int len = pwdBytes.Length;
  151. if (len > keyBytes.Length) len = keyBytes.Length;
  152. System.Array.Copy(pwdBytes, keyBytes, len);
  153.  
  154. rijndaelCipher.Key = keyBytes;
  155. rijndaelCipher.IV = ivBytes;
  156.  
  157. ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
  158. byte[] plainText = transform.TransformFinalBlock(encryptedData, , encryptedData.Length);
  159.  
  160. TextData = Encoding.UTF8.GetString(plainText).Trim();
  161. return ;
  162. }
  163. catch
  164. {
  165. return -;
  166. }
  167. }
  168. }
  169. }

RSA

  1. using System;
  2. using System.Security.Cryptography;
  3. using System.Text;
  4.  
  5. namespace Common
  6. {
  7. public class RSAProvider
  8. {
  9. public static int KEYSIZE = ;
  10. /// <summary>
  11. /// 自动生成公私密钥
  12. /// </summary>
  13. /// <param name="Modulus">输出:加密公钥</param>
  14. /// <param name="Exponent">输入:公钥指数</param>
  15. /// <param name="PrivateKey">输出:私钥</param>
  16. public static void GenerateKey(out string Modulus, out string Exponent, out string PrivateKey)
  17. {
  18. RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(KEYSIZE);
  19.  
  20. RSAParameters pubparam = rsaProvider.ExportParameters(false);
  21. byte[] mod = pubparam.Modulus;
  22. byte[] exp = pubparam.Exponent;
  23.  
  24. byte[] prikey = rsaProvider.ExportCspBlob(true);
  25.  
  26. Modulus = Convert.ToBase64String(mod);
  27. Exponent = Convert.ToBase64String(exp);
  28. PrivateKey = Convert.ToBase64String(prikey);
  29. }
  30.  
  31. /// <summary>
  32. /// RSA加密
  33. /// </summary>
  34. /// <param name="TextData">待加密字符</param>
  35. /// <param name="Modulus">加密公钥</param>
  36. /// <param name="Exponent">加密指数</param>
  37. /// <param name="CryptText">输出:已加密字符串</param>
  38. /// <returns>0:成功加密 -1:待加密字符串不为能空 -2:加密公钥不能为空 -3:待加密字符串超长 -4:其他错误</returns>
  39. public static int EncryptText(string TextData, string Modulus, string Exponent, out string CryptText)
  40. {
  41. CryptText = "";
  42. if (string.IsNullOrEmpty(TextData)) return -;
  43. if (string.IsNullOrEmpty(Modulus)) return -;
  44. if (TextData.Length > KEYSIZE / - ) return -;
  45. try
  46. {
  47. RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(KEYSIZE);
  48. byte[] modBytes = Convert.FromBase64String(Modulus);
  49. byte[] expBytes = Convert.FromBase64String(Exponent);
  50.  
  51. RSAParameters p = new RSAParameters();
  52. p.Modulus = modBytes;
  53. p.Exponent = expBytes;
  54.  
  55. rsa.ImportParameters(p);
  56. byte[] plainText = Encoding.UTF8.GetBytes(TextData);
  57. byte[] cipherBytes = rsa.Encrypt(plainText, false);
  58.  
  59. CryptText = Convert.ToBase64String(cipherBytes);
  60.  
  61. return ;
  62. }
  63. catch { return -; }
  64. }
  65.  
  66. /// <summary>
  67. /// RSA解密
  68. /// </summary>
  69. /// <param name="CryptText">待解密字符串</param>
  70. /// <param name="Key">解密私钥</param>
  71. /// <param name="TextData">输出:已解密的字符串</param>
  72. /// <returns>0:成功解密 -1:待解密字符串不为能空 -2:解密私钥不能为空 -4:其他错误</returns>
  73. public static int DecryptText(string CryptText, string PrivateKey, out string TextData)
  74. {
  75. TextData = "";
  76.  
  77. if (string.IsNullOrEmpty(CryptText)) return -;
  78. if (string.IsNullOrEmpty(PrivateKey)) return -;
  79.  
  80. try
  81. {
  82. RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(KEYSIZE);
  83.  
  84. byte[] prikey = Convert.FromBase64String(PrivateKey); ;
  85. rsa.ImportCspBlob(prikey);
  86.  
  87. byte[] cipherBytes = Convert.FromBase64String(CryptText);
  88. byte[] plainText = rsa.Decrypt(cipherBytes, false);
  89.  
  90. TextData = Encoding.UTF8.GetString(plainText);
  91.  
  92. return ;
  93. }
  94. catch { return -; }
  95. }
  96. }
  97. }

MD5

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace Common
  7. {
  8. public class EncryptMD5
  9. {
  10.  
  11. public static string GetMd5(string s, Encoding encoding)
  12. {
  13. System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();//实例化一个MD5
  14. byte[] t = md5.ComputeHash(encoding.GetBytes(s));//生成MD5哈希值
  15. StringBuilder sb = new StringBuilder();
  16. for (int i = ; i < t.Length; i++)
  17. {
  18. sb.Append(t[i].ToString("x").PadLeft(, ''));//将哈希值转换为字符串
  19. }
  20. return sb.ToString().ToUpper();
  21. }
  22. }
  23. }

C# 常用加密处理的更多相关文章

  1. iOS代码加密常用加密方式

    iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...

  2. PHP的几个常用加密函数(转载 https://jellybool.com/post/php-encrypt-functions)

    PHP的几个常用加密函数 在网站的开发过程中,常常需要对部分数据(如用户密码)进行加密,本文主要介绍PHP的几个常见的加密函数 MD5加密: string md5 ( string $str [, b ...

  3. ASP.NET常用加密解密方法

    ASP.NET常用加密解密方法 一.MD5加密解密 1.加密 C# 代码           public static string ToMd5(string clearString)        ...

  4. 2019-2-20C#开发中常用加密解密方法解析

    C#开发中常用加密解密方法解析 一.MD5加密算法 我想这是大家都常听过的算法,可能也用的比较多.那么什么是MD5算法呢?MD5全称是 message-digest algorithm 5[|ˈmes ...

  5. php实现的三个常用加密解密功能函数示例

    目录 算法一: 算法二: 算法三(改进第一个加密之后的算法) 本文实例讲述了php实现的三个常用加密解密功能函数.分享给大家供大家参考,具体如下: 算法一: //加密函数 function lock_ ...

  6. iOS常用加密方法(aes、md5、base64)

    1.代码 iOS常用加密方法(aes.md5.base64) .AES加密 NSData+AES.h文件 // // NSData-AES.h // Smile // // Created by 周 ...

  7. PHP的几个常用加密函数

    在php的开发过程中,常常需要对部分数据(如用户密码)进行加密 一.加密类型: 1.单向散列加密 就是把任意长度的信息进行散列计算,得到固定长度的输出,这个散列计算过程是单向的,即不能对固定长度的输出 ...

  8. JAVA常用加密解密算法Encryption and decryption

    加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些 ...

  9. .NET Core 常用加密和Hash工具NETCore.Encrypt

    前言 在日常开发过程中,不可避免的涉及到数据加密解密(Hash)操作,所以就有想法开发通用工具,NETCore.Encrypt就诞生了.目前NETCore.Encrypt只支持.NET Core ,工 ...

  10. 关于Java中常用加密/解密方法的实现

    安全问题已经成为一个越来越重要的问题,在Java中如何对重要数据进行加密解密是本文的主要内容. 一.常用的加密/解密算法 1.Base64 严格来说Base64并不是一种加密/解密算法,而是一种编码方 ...

随机推荐

  1. In p = new Fred(), does the Fred memory “leak” if the Fred constructor throws an exception?

    No. If an exception occurs during the Fred constructor of p = new Fred(), the C++ language guarantee ...

  2. Web前端的学习介绍(截止今天还有Bootstrap没有学,要腾点时间解决掉)

    Web前端的学习分为以下几个阶段,具体的学习路线图如图所示. 第一阶段——HTML的学习 超文本标记语言(HyperText Mark-up Language 简称HTML)是一个网页的骨架,无论是静 ...

  3. 关于刷Sylvain/burst_ind分支的一些问题解答

    Sylvain/burst_ind分支是网上说的比较多的带sniffer功能的分支,但是编译完无法刷固件 关于以上问题.相信很多朋友碰到过.但是国内没有人分享相关的经验.在这里我分享下我的经验. ht ...

  4. 为什么SQL语句加 1=1

    是为了链接下面的查询条件条件,也或者是替换没有查询条件的语句.比如:要把检索条件作为一个参数传递给SQL,那么,当这个检索语句不存在的话就可以给它赋值为1=1.这样就避免了SQL出错,也就可以把加条件 ...

  5. Linux iptables重启后失效

    解决办法如下: 输入完iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 后 执行iptables-s ...

  6. eval函数的工作原理

    如果您想详细了解eval和JSON请参考以下链接: eval  :https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Glob ...

  7. Java测试工具

    1.   开源测试工具: http://www.open-open.com/43.htm 2.   10款常用的JAVA测试工具 :http://developer.51cto.com/art/200 ...

  8. SpringCloud学习后获取的地址

    关于SpringCloud + Docker 学习地址: (1) https://yq.aliyun.com/articles/57265 (2) https://yq.aliyun.com/team ...

  9. Generic Netlink详解

    netlink socket是一种用于用户态进程和内核态进程之间的通信机制.它通过为内核模块提供一组特殊的API,并为用户程序提供了一组标准的socket接口的方式,实现了全双工的通讯连接. Netl ...

  10. Ubuntu14.04安装配置Open vSwitch

    最近在研究学习Open vSwitch,准备在本地Ubuntu14.04机器上安装一下,并基于其创建一些KVM虚拟机,下面就简要记录下在Ubuntu14.04系统上安装Open vSwitch的过程. ...