C#加密算法总结

C#加密算法总结

MD5加密

 1         /// <summary>
 2         /// MD5加密
 3         /// </summary>
 4         /// <param name="strPwd">原字符串</param>
 5         /// <returns>加密后字符串</returns>
 6         public static string GetMD5(string strPwd)
 7         {
 8             //MD5 对象创建的两种方式
 9             //MD5 md5 = MD5.Create();
10             MD5 md5 = new MD5CryptoServiceProvider();
11             //将输入的密码转换成字节数组
12             byte[] bPwd = Encoding.UTF8.GetBytes(strPwd);
13             //计算指定字节数组的哈希值
14             byte[] bMD5 = md5.ComputeHash(bPwd);
15             //释放加密服务提供类的所有资源
16             md5.Clear();
17             StringBuilder sbMD5Pwd = new StringBuilder();
18             for (int i = 0; i < bMD5.Length; i++)
19             {
20                 //将每个字节数据转换为2位的16进制的字符
21                 sbMD5Pwd.Append(bMD5[i].ToString("x2"));
22             }
23             return sbMD5Pwd.ToString();
24         }

SHA1加密

 1         /// <summary>
 2         /// 使用 SHA1 加密算法来加密
 3         /// </summary>
 4         /// <param name="sourceString">原字符串</param>
 5         /// <returns>加密后字符串</returns>
 6         public static string SHA1_Encrypt(string sourceString)
 7         {
 8             byte[] StrRes = Encoding.UTF8.GetBytes(sourceString);
 9             HashAlgorithm iSHA = new SHA1CryptoServiceProvider();
10             StrRes = iSHA.ComputeHash(StrRes);
11             StringBuilder EnText = new StringBuilder();
12             foreach (byte iByte in StrRes)
13             {
14                 EnText.AppendFormat("{0:x2}", iByte);
15             }
16             return EnText.ToString();
17         }

SHA256加密

 1         /// <summary>
 2         /// SHA256 加密
 3         /// </summary>
 4         /// <param name="sourceString">原字符串</param>
 5         /// <returns>加密后字符串</returns>
 6         public static string SHA256_Encrypt(string sourceString)
 7         {
 8             byte[] data = Encoding.UTF8.GetBytes(sourceString);
 9             SHA256 shaM = SHA256.Create();
10             byte[] result = shaM.ComputeHash(data);
11             StringBuilder EnText = new StringBuilder();
12             foreach (byte iByte in result)
13             {
14                 EnText.AppendFormat("{0:x2}", iByte);
15             }
16             return EnText.ToString();
17         }

SHA384加密

 1         /// <summary>
 2         /// SHA384 加密
 3         /// </summary>
 4         /// <param name="sourceString">原字符串</param>
 5         /// <returns>加密后字符串</returns>
 6         public static string SHA384_Encrypt(string sourceString)
 7         {
 8             byte[] data = Encoding.UTF8.GetBytes(sourceString);
 9             SHA384 shaM = SHA384.Create();
10             byte[] result = shaM.ComputeHash(data);
11             StringBuilder EnText = new StringBuilder();
12             foreach (byte iByte in result)
13             {
14                 EnText.AppendFormat("{0:x2}", iByte);
15             }
16             return EnText.ToString();
17         }

SHA512加密

 1         /// <summary>
 2         /// SHA512_加密
 3         /// </summary>
 4         /// <param name="sourceString">原字符串</param>
 5         /// <returns>加密后字符串</returns>
 6         public static string SHA512_Encrypt(string sourceString)
 7         {
 8             byte[] data = Encoding.UTF8.GetBytes(sourceString);
 9             SHA512 shaM = new SHA512Managed();
10             byte[] result = shaM.ComputeHash(data);
11             StringBuilder EnText = new StringBuilder();
12             foreach (byte iByte in result)
13             {
14                 EnText.AppendFormat("{0:x2}", iByte);
15             }
16             return EnText.ToString();
17         }

AES加密、解密

 1         /// <summary>
 2         /// AES加密
 3         /// </summary>
 4         /// <param name="encryptStr">加密字符串</param>
 5         /// <param name="encryptKey">密钥</param>
 6         /// <returns>密码</returns>
 7         public static string AESEncrypt(string encryptStr, string encryptKey)
 8         {
 9             if (string.IsNullOrWhiteSpace(encryptStr))
10                 return string.Empty;
11
12             encryptKey = StringHelper.SubString(encryptKey, 32);
13             encryptKey = encryptKey.PadRight(32, ‘ ‘);
14
15             //分组加密算法
16             SymmetricAlgorithm des = Rijndael.Create();
17             byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptStr);//得到需要加密的字节数组
18             //设置密钥及密钥向量
19             des.Key = Encoding.UTF8.GetBytes(encryptKey);
20             des.IV = _aeskeys;
21             byte[] cipherBytes = null;
22             using (MemoryStream ms = new MemoryStream())
23             {
24                 using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
25                 {
26                     cs.Write(inputByteArray, 0, inputByteArray.Length);
27                     cs.FlushFinalBlock();
28                     cipherBytes = ms.ToArray();//得到加密后的字节数组
29                     cs.Close();
30                     ms.Close();
31                 }
32             }
33             return Convert.ToBase64String(cipherBytes);
34         }
35
36         /// <summary>
37         /// AES解密
38         /// </summary>
39         /// <param name="decryptStr">解密字符串</param>
40         /// <param name="decryptKey">密钥</param>
41         /// <returns>原码</returns>
42         public static string AESDecrypt(string decryptStr, string decryptKey)
43         {
44             if (string.IsNullOrWhiteSpace(decryptStr))
45                 return string.Empty;
46
47             decryptKey = StringHelper.SubString(decryptKey, 32);
48             decryptKey = decryptKey.PadRight(32, ‘ ‘);
49
50             byte[] cipherText = Convert.FromBase64String(decryptStr);
51
52             SymmetricAlgorithm des = Rijndael.Create();
53             des.Key = Encoding.UTF8.GetBytes(decryptKey);
54             des.IV = _aeskeys;
55             byte[] decryptBytes = new byte[cipherText.Length];
56             using (MemoryStream ms = new MemoryStream(cipherText))
57             {
58                 using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Read))
59                 {
60                     cs.Read(decryptBytes, 0, decryptBytes.Length);
61                     cs.Close();
62                     ms.Close();
63                 }
64             }
65             return Encoding.UTF8.GetString(decryptBytes).Replace("\0", "");//将字符串后尾的‘\0‘去掉
66         }
时间: 2025-01-22 06:58:12

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

常见加密算法

常见的加密算法可以分成三类,对称加密算法,公钥加密算法和单向加密算法. 对称加密 指加密和解密使用相同密钥的加密算法.对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性.假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦.对称加密算法的安全性取决于加密密钥的保存情况,但要求企业中每一个持有密钥的人都保守秘密是不可能的,他们通常会有意无意的把密钥泄漏出去

加密算法笔记

加密算法:MD5.SHA,DES,AES,IDEA,RSA.BlowFish 一:单向散列算法 单向散列算法:1.也就是Hash算法,将任意长度的消息队列压缩成某一固定长度的函数, 2.过程不可逆,只是单向过程, 3.包括MD5,SHA,N-Hash, MD5:消息摘要算法,对输入任意长度的消息进行运算,产生一个128位的消息摘要. SHA:安全散列算法,SHA-1,SHA-256,SHA-384,SHA-512 二:对称加密算法 1.加密秘钥和解密秘钥完全相同 2.加密安全性依赖于秘钥的秘密性

C#封装加密算法(MD5、SHA、HMAC、DES、RSA)的一个类

using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen.Helpers { /// <summary> /// 安全助手 /// </summary> public sealed class SecurityHelper { private static readonly byte [] IvBytes = { 0x01, 0x23, 0x

Patch OpenSSL使其支持CHACH20_POLY1305加密算法

截止目前的OpenSSL-1.0.2j的版本还不支持Google的CHACHA20加密算法.CHACHA20加密算法相对RC4等相对安全,也针对ARM的手机端进行优化,使其更快更省电. 不过最新的Intel处理器及ARM V8的处理器通过AES-NI指令集对AES-GCM加密算法进行了优化,速度要比chacha20快很多,所以在支持AES-NI指令集的设备上优先使用AES-GCM加密算法,在设备不支持的情况下使用chacha20加密算法. 支持chacha20加密算法的3种方式: 使用Libre

加密技术及常见加密算法

有了互联网的同时给我们的日常生活带来了不少的便利,与此同时也给我们带来了不少的安全隐患,可能你在和别人通信的同时,通信数据就被别人截获了,所以就必须要有一种相应的加密技术,来保护我们的通信隐私.那么今天就大家来简单的了解一下加密技术及一些常见的加密算法. 1.为什么需要加密 1.不加密流量的易受攻击性 2.不加密密码/数据容易被嗅探 3.不加密数据容易被操作 4.不加密无法验证操作 5.不加密相当于邮寄明信片 2.不安全的传统协议 telnet.FTP.POP3等等:不安全密码 http.smt

PHP android ios相互兼容的AES加密算法

APP项目用户密码传输一直没有用HTTPS,考虑到用户的隐私暂时先用AES对密码加密,以后也可以用于手机端与服务端加密交互. PHP的免费版phpAES项目,手机端解码各种不对. 好不容易找了PHP ANDROID IOS,相互加解密正常的AES加密算法代码. PHP的AES加密算法: [codesyntax lang=”php”] <?php class MCrypt { private $hex_iv = '00000000000000000000000000000000'; # conve

[转载]MD5加密算法原理

本文转载自: http://blog.csdn.net/forgotaboutgirl/article/details/7258109 需要视频版的可以看一下泰克老林讲的MD5原理 下载地址: 网速太卡,周末上传后补上.... MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用. MD5功能: 输入任意长度的信息,经过处理,输出为128位的信息(数字指纹): 不同的输入得到

对称加密算法

对称加密算法 提示:加密内容属于高级程序员的话题!有些内容会很枯燥!注意掌握加密的思路和操作步骤即可!代码不要求会写,只要会用就行! 又称传统加密算法 加密和解密使用同一个密钥 对称加密算法示例 密钥:X 加密算法:每个字符+X 明文:Hello 密钥为 1 时加密结果:Ifmmp 密钥为 2 时加密结果:Jgnnq 优缺点 优点 算法公开.计算量小.加密速度快.加密效率高 缺点 双方使用相同钥匙,安全性得不到保证 注意事项 密钥的保密工作非常重要 密钥要求定期更换 经典算法 算法 说明 DES

非对称加密算法

介绍 非对称加密算法需要两个密钥:公开密钥(publickey) 和 私有密钥(privatekey) 公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密:如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密 特点 算法强度复杂.安全性依赖于算法与密钥 加密解密速度慢 与对称加密算法的对比 对称加密只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥 非对称密钥体制有两种密钥,其中一个是公开的 RSA 算法原理 找出两个“很大”的质数:P & Q

第九章 对称加密算法--IDEA

注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第7章“初等加密算法--对称加密算法” 9.1.IDEA 特点: 先于AES出来取代DES 安全性极高 常用于电子邮件加密算法 9.2.实现方式 Bouncy Castle(BC,工作模式只有ECB,密钥长度为128位) 9.2.1.基于BC实现的IDEA算法 1 package com.util.idea; 2 3 import java.io.UnsupportedEncodingException; 4 import java