c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法
生活随笔
收集整理的這篇文章主要介紹了
c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
using?System;
using?System.IO;
using?System.Data;
using?System.Text;
using?System.Diagnostics;
using?System.Security;
using?System.Security.Cryptography;
/**//*?
?*?.Net框架由于擁有CLR提供的豐富庫支持,只需很少的代碼即可實(shí)現(xiàn)先前使用C等舊式語言很難實(shí)現(xiàn)的加密算法。本類實(shí)現(xiàn)一些常用機(jī)密算法,供參考。其中MD5算法返回Int的ToString字串。返回?cái)?shù)字字母型結(jié)果的算法參見之前Blog文章
?*/
namespace?檔案數(shù)字化加工
{
????/**////?<summary>
????///?類名:HashEncrypt
????///?作用:對(duì)傳入的字符串進(jìn)行Hash運(yùn)算,返回通過Hash算法加密過的字串。
????///?屬性:[無]
????///?構(gòu)造函數(shù)額參數(shù):
????///?IsReturnNum:是否返回為加密后字符的Byte代碼
????///?IsCaseSensitive:是否區(qū)分大小寫。
????///?方法:此類提供MD5,SHA1,SHA256,SHA512等四種算法,加密字串的長(zhǎng)度依次增大。
????///?</summary>
????public?class?HashEncrypt
????{
????????//private?string?strIN;
????????private?bool?isReturnNum;
????????private?bool?isCaseSensitive;
????????/**////?<summary>
????????///?類初始化,此類提供MD5,SHA1,SHA256,SHA512等四種算法,加密字串的長(zhǎng)度依次增大。
????????///?</summary>
????????///?<param?name="IsCaseSensitive">是否區(qū)分大小寫</param>
????????///?<param?name="IsReturnNum">是否返回為加密后字符的Byte代碼</param>
????????public?HashEncrypt(bool?IsCaseSensitive,?bool?IsReturnNum)
????????{
????????????this.isReturnNum?=?IsReturnNum;
????????????this.isCaseSensitive?=?IsCaseSensitive;
????????}
????????private?string?getstrIN(string?strIN)
????????{
????????????//string?strIN?=?strIN;
????????????if?(strIN.Length?==?0)
????????????{
????????????????strIN?=?"~NULL~";
????????????}
????????????if?(isCaseSensitive?==?false)
????????????{
????????????????strIN?=?strIN.ToUpper();
????????????}
????????????return?strIN;
????????}
????????public?string?MD5Encrypt(string?strIN)
????????{
????????????//string?strIN?=?getstrIN(strIN);
????????????byte[]?tmpByte;
????????????MD5?md5?=?new?MD5CryptoServiceProvider();
????????????tmpByte?=?md5.ComputeHash(GetKeyByteArray(getstrIN(strIN)));
????????????md5.Clear();
????????????return?GetStringValue(tmpByte);
????????}
????????public?string?SHA1Encrypt(string?strIN)
????????{
????????????//string?strIN?=?getstrIN(strIN);
????????????byte[]?tmpByte;
????????????SHA1?sha1?=?new?SHA1CryptoServiceProvider();
????????????tmpByte?=?sha1.ComputeHash(GetKeyByteArray(strIN));
????????????sha1.Clear();
????????????return?GetStringValue(tmpByte);
????????}
????????public?string?SHA256Encrypt(string?strIN)
????????{
????????????//string?strIN?=?getstrIN(strIN);
????????????byte[]?tmpByte;
????????????SHA256?sha256?=?new?SHA256Managed();
????????????tmpByte?=?sha256.ComputeHash(GetKeyByteArray(strIN));
????????????sha256.Clear();
????????????return?GetStringValue(tmpByte);
????????}
????????public?string?SHA512Encrypt(string?strIN)
????????{
????????????//string?strIN?=?getstrIN(strIN);
????????????byte[]?tmpByte;
????????????SHA512?sha512?=?new?SHA512Managed();
????????????tmpByte?=?sha512.ComputeHash(GetKeyByteArray(strIN));
????????????sha512.Clear();
????????????return?GetStringValue(tmpByte);
????????}
????????/**////?<summary>
????????///?使用DES加密(Added?by?niehl?2005-4-6)
????????///?</summary>
????????///?<param?name="originalValue">待加密的字符串</param>
????????///?<param?name="key">密鑰(最大長(zhǎng)度8)</param>
????????///?<param?name="IV">初始化向量(最大長(zhǎng)度8)</param>
????????///?<returns>加密后的字符串</returns>
????????public?string?DESEncrypt(string?originalValue,?string?key,?string?IV)
????????{
????????????//將key和IV處理成8個(gè)字符
????????????key?+=?"12345678";
????????????IV?+=?"12345678";
????????????key?=?key.Substring(0,?8);
????????????IV?=?IV.Substring(0,?8);
????????????SymmetricAlgorithm?sa;
????????????ICryptoTransform?ct;
????????????MemoryStream?ms;
????????????CryptoStream?cs;
????????????byte[]?byt;
????????????sa?=?new?DESCryptoServiceProvider();
????????????sa.Key?=?Encoding.UTF8.GetBytes(key);
????????????sa.IV?=?Encoding.UTF8.GetBytes(IV);
????????????ct?=?sa.CreateEncryptor();
????????????byt?=?Encoding.UTF8.GetBytes(originalValue);
????????????ms?=?new?MemoryStream();
????????????cs?=?new?CryptoStream(ms,?ct,?CryptoStreamMode.Write);
????????????cs.Write(byt,?0,?byt.Length);
????????????cs.FlushFinalBlock();
????????????cs.Close();
????????????return?Convert.ToBase64String(ms.ToArray());
????????}
????????public?string?DESEncrypt(string?originalValue,?string?key)
????????{
????????????return?DESEncrypt(originalValue,?key,?key);
????????}
????????/**////?<summary>
????????///?使用DES解密(Added?by?niehl?2005-4-6)
????????///?</summary>
????????///?<param?name="encryptedValue">待解密的字符串</param>
????????///?<param?name="key">密鑰(最大長(zhǎng)度8)</param>
????????///?<param?name="IV">m初始化向量(最大長(zhǎng)度8)</param>
????????///?<returns>解密后的字符串</returns>
????????public?string?DESDecrypt(string?encryptedValue,?string?key,?string?IV)
????????{
????????????//將key和IV處理成8個(gè)字符
????????????key?+=?"12345678";
????????????IV?+=?"12345678";
????????????key?=?key.Substring(0,?8);
????????????IV?=?IV.Substring(0,?8);
????????????SymmetricAlgorithm?sa;
????????????ICryptoTransform?ct;
????????????MemoryStream?ms;
????????????CryptoStream?cs;
????????????byte[]?byt;
????????????sa?=?new?DESCryptoServiceProvider();
????????????sa.Key?=?Encoding.UTF8.GetBytes(key);
????????????sa.IV?=?Encoding.UTF8.GetBytes(IV);
????????????ct?=?sa.CreateDecryptor();
????????????byt?=?Convert.FromBase64String(encryptedValue);
????????????ms?=?new?MemoryStream();
????????????cs?=?new?CryptoStream(ms,?ct,?CryptoStreamMode.Write);
????????????cs.Write(byt,?0,?byt.Length);
????????????cs.FlushFinalBlock();
????????????cs.Close();
????????????return?Encoding.UTF8.GetString(ms.ToArray());
????????}
????????public?string?DESDecrypt(string?encryptedValue,?string?key)
????????{
????????????return?DESDecrypt(encryptedValue,?key,?key);
????????}
????????private?string?GetStringValue(byte[]?Byte)
????????{
????????????string?tmpString?=?"";
????????????if?(this.isReturnNum?==?false)
????????????{
????????????????ASCIIEncoding?Asc?=?new?ASCIIEncoding();
????????????????tmpString?=?Asc.GetString(Byte);
????????????}
????????????else
????????????{
????????????????int?iCounter;
????????????????for?(iCounter?=?0;?iCounter?<?Byte.Length;?iCounter++)
????????????????{
????????????????????tmpString?=?tmpString?+?Byte[iCounter].ToString();
????????????????}
????????????}
????????????return?tmpString;
????????}
????????private?byte[]?GetKeyByteArray(string?strKey)
????????{
????????????ASCIIEncoding?Asc?=?new?ASCIIEncoding();
????????????int?tmpStrLen?=?strKey.Length;
????????????byte[]?tmpByte?=?new?byte[tmpStrLen?-?1];
????????????tmpByte?=?Asc.GetBytes(strKey);
????????????return?tmpByte;
????????}
????}
}
using?System.IO;
using?System.Data;
using?System.Text;
using?System.Diagnostics;
using?System.Security;
using?System.Security.Cryptography;
/**//*?
?*?.Net框架由于擁有CLR提供的豐富庫支持,只需很少的代碼即可實(shí)現(xiàn)先前使用C等舊式語言很難實(shí)現(xiàn)的加密算法。本類實(shí)現(xiàn)一些常用機(jī)密算法,供參考。其中MD5算法返回Int的ToString字串。返回?cái)?shù)字字母型結(jié)果的算法參見之前Blog文章
?*/
namespace?檔案數(shù)字化加工
{
????/**////?<summary>
????///?類名:HashEncrypt
????///?作用:對(duì)傳入的字符串進(jìn)行Hash運(yùn)算,返回通過Hash算法加密過的字串。
????///?屬性:[無]
????///?構(gòu)造函數(shù)額參數(shù):
????///?IsReturnNum:是否返回為加密后字符的Byte代碼
????///?IsCaseSensitive:是否區(qū)分大小寫。
????///?方法:此類提供MD5,SHA1,SHA256,SHA512等四種算法,加密字串的長(zhǎng)度依次增大。
????///?</summary>
????public?class?HashEncrypt
????{
????????//private?string?strIN;
????????private?bool?isReturnNum;
????????private?bool?isCaseSensitive;
????????/**////?<summary>
????????///?類初始化,此類提供MD5,SHA1,SHA256,SHA512等四種算法,加密字串的長(zhǎng)度依次增大。
????????///?</summary>
????????///?<param?name="IsCaseSensitive">是否區(qū)分大小寫</param>
????????///?<param?name="IsReturnNum">是否返回為加密后字符的Byte代碼</param>
????????public?HashEncrypt(bool?IsCaseSensitive,?bool?IsReturnNum)
????????{
????????????this.isReturnNum?=?IsReturnNum;
????????????this.isCaseSensitive?=?IsCaseSensitive;
????????}
????????private?string?getstrIN(string?strIN)
????????{
????????????//string?strIN?=?strIN;
????????????if?(strIN.Length?==?0)
????????????{
????????????????strIN?=?"~NULL~";
????????????}
????????????if?(isCaseSensitive?==?false)
????????????{
????????????????strIN?=?strIN.ToUpper();
????????????}
????????????return?strIN;
????????}
????????public?string?MD5Encrypt(string?strIN)
????????{
????????????//string?strIN?=?getstrIN(strIN);
????????????byte[]?tmpByte;
????????????MD5?md5?=?new?MD5CryptoServiceProvider();
????????????tmpByte?=?md5.ComputeHash(GetKeyByteArray(getstrIN(strIN)));
????????????md5.Clear();
????????????return?GetStringValue(tmpByte);
????????}
????????public?string?SHA1Encrypt(string?strIN)
????????{
????????????//string?strIN?=?getstrIN(strIN);
????????????byte[]?tmpByte;
????????????SHA1?sha1?=?new?SHA1CryptoServiceProvider();
????????????tmpByte?=?sha1.ComputeHash(GetKeyByteArray(strIN));
????????????sha1.Clear();
????????????return?GetStringValue(tmpByte);
????????}
????????public?string?SHA256Encrypt(string?strIN)
????????{
????????????//string?strIN?=?getstrIN(strIN);
????????????byte[]?tmpByte;
????????????SHA256?sha256?=?new?SHA256Managed();
????????????tmpByte?=?sha256.ComputeHash(GetKeyByteArray(strIN));
????????????sha256.Clear();
????????????return?GetStringValue(tmpByte);
????????}
????????public?string?SHA512Encrypt(string?strIN)
????????{
????????????//string?strIN?=?getstrIN(strIN);
????????????byte[]?tmpByte;
????????????SHA512?sha512?=?new?SHA512Managed();
????????????tmpByte?=?sha512.ComputeHash(GetKeyByteArray(strIN));
????????????sha512.Clear();
????????????return?GetStringValue(tmpByte);
????????}
????????/**////?<summary>
????????///?使用DES加密(Added?by?niehl?2005-4-6)
????????///?</summary>
????????///?<param?name="originalValue">待加密的字符串</param>
????????///?<param?name="key">密鑰(最大長(zhǎng)度8)</param>
????????///?<param?name="IV">初始化向量(最大長(zhǎng)度8)</param>
????????///?<returns>加密后的字符串</returns>
????????public?string?DESEncrypt(string?originalValue,?string?key,?string?IV)
????????{
????????????//將key和IV處理成8個(gè)字符
????????????key?+=?"12345678";
????????????IV?+=?"12345678";
????????????key?=?key.Substring(0,?8);
????????????IV?=?IV.Substring(0,?8);
????????????SymmetricAlgorithm?sa;
????????????ICryptoTransform?ct;
????????????MemoryStream?ms;
????????????CryptoStream?cs;
????????????byte[]?byt;
????????????sa?=?new?DESCryptoServiceProvider();
????????????sa.Key?=?Encoding.UTF8.GetBytes(key);
????????????sa.IV?=?Encoding.UTF8.GetBytes(IV);
????????????ct?=?sa.CreateEncryptor();
????????????byt?=?Encoding.UTF8.GetBytes(originalValue);
????????????ms?=?new?MemoryStream();
????????????cs?=?new?CryptoStream(ms,?ct,?CryptoStreamMode.Write);
????????????cs.Write(byt,?0,?byt.Length);
????????????cs.FlushFinalBlock();
????????????cs.Close();
????????????return?Convert.ToBase64String(ms.ToArray());
????????}
????????public?string?DESEncrypt(string?originalValue,?string?key)
????????{
????????????return?DESEncrypt(originalValue,?key,?key);
????????}
????????/**////?<summary>
????????///?使用DES解密(Added?by?niehl?2005-4-6)
????????///?</summary>
????????///?<param?name="encryptedValue">待解密的字符串</param>
????????///?<param?name="key">密鑰(最大長(zhǎng)度8)</param>
????????///?<param?name="IV">m初始化向量(最大長(zhǎng)度8)</param>
????????///?<returns>解密后的字符串</returns>
????????public?string?DESDecrypt(string?encryptedValue,?string?key,?string?IV)
????????{
????????????//將key和IV處理成8個(gè)字符
????????????key?+=?"12345678";
????????????IV?+=?"12345678";
????????????key?=?key.Substring(0,?8);
????????????IV?=?IV.Substring(0,?8);
????????????SymmetricAlgorithm?sa;
????????????ICryptoTransform?ct;
????????????MemoryStream?ms;
????????????CryptoStream?cs;
????????????byte[]?byt;
????????????sa?=?new?DESCryptoServiceProvider();
????????????sa.Key?=?Encoding.UTF8.GetBytes(key);
????????????sa.IV?=?Encoding.UTF8.GetBytes(IV);
????????????ct?=?sa.CreateDecryptor();
????????????byt?=?Convert.FromBase64String(encryptedValue);
????????????ms?=?new?MemoryStream();
????????????cs?=?new?CryptoStream(ms,?ct,?CryptoStreamMode.Write);
????????????cs.Write(byt,?0,?byt.Length);
????????????cs.FlushFinalBlock();
????????????cs.Close();
????????????return?Encoding.UTF8.GetString(ms.ToArray());
????????}
????????public?string?DESDecrypt(string?encryptedValue,?string?key)
????????{
????????????return?DESDecrypt(encryptedValue,?key,?key);
????????}
????????private?string?GetStringValue(byte[]?Byte)
????????{
????????????string?tmpString?=?"";
????????????if?(this.isReturnNum?==?false)
????????????{
????????????????ASCIIEncoding?Asc?=?new?ASCIIEncoding();
????????????????tmpString?=?Asc.GetString(Byte);
????????????}
????????????else
????????????{
????????????????int?iCounter;
????????????????for?(iCounter?=?0;?iCounter?<?Byte.Length;?iCounter++)
????????????????{
????????????????????tmpString?=?tmpString?+?Byte[iCounter].ToString();
????????????????}
????????????}
????????????return?tmpString;
????????}
????????private?byte[]?GetKeyByteArray(string?strKey)
????????{
????????????ASCIIEncoding?Asc?=?new?ASCIIEncoding();
????????????int?tmpStrLen?=?strKey.Length;
????????????byte[]?tmpByte?=?new?byte[tmpStrLen?-?1];
????????????tmpByte?=?Asc.GetBytes(strKey);
????????????return?tmpByte;
????????}
????}
}
轉(zhuǎn)載于:https://www.cnblogs.com/hzuIT/articles/758974.html
總結(jié)
以上是生活随笔為你收集整理的c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 已知多个同比增速和现期,快速比较多个对象
- 下一篇: kernel32.dll动态链接库报错解