700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c# 实现MD5 SHA1 SHA256 SHA512等常用加密算法

c# 实现MD5 SHA1 SHA256 SHA512等常用加密算法

时间:2019-11-08 10:10:58

相关推荐

c# 实现MD5 SHA1 SHA256 SHA512等常用加密算法

usingSystem;

usingSystem.IO;

usingSystem.Data;

usingSystem.Text;

usingSystem.Diagnostics;

usingSystem.Security;

usingSystem.Security.Cryptography;

/**//*

*.Net框架由于拥有CLR提供的丰富库支持,只需很少的代码即可实现先前使用C等旧式语言很难实现的加密算法。本类实现一些常用机密算法,供参考。其中MD5算法返回Int的ToString字串。返回数字字母型结果的算法参见之前Blog文章

*/

namespace档案数字化加工

{

/**////<summary>

///类名:HashEncrypt

///作用:对传入的字符串进行Hash运算,返回通过Hash算法加密过的字串。

///属性:[无]

///构造函数额参数:

///IsReturnNum:是否返回为加密后字符的Byte代码

///IsCaseSensitive:是否区分大小写。

///方法:此类提供MD5,SHA1,SHA256,SHA512等四种算法,加密字串的长度依次增大。

///</summary>

publicclassHashEncrypt

{

//privatestringstrIN;

privateboolisReturnNum;

privateboolisCaseSensitive;

/**////<summary>

///类初始化,此类提供MD5,SHA1,SHA256,SHA512等四种算法,加密字串的长度依次增大。

///</summary>

///<paramname="IsCaseSensitive">是否区分大小写</param>

///<paramname="IsReturnNum">是否返回为加密后字符的Byte代码</param>

publicHashEncrypt(boolIsCaseSensitive,boolIsReturnNum)

{

this.isReturnNum=IsReturnNum;

this.isCaseSensitive=IsCaseSensitive;

}

privatestringgetstrIN(stringstrIN)

{

//stringstrIN=strIN;

if(strIN.Length==0)

{

strIN="~NULL~";

}

if(isCaseSensitive==false)

{

strIN=strIN.ToUpper();

}

returnstrIN;

}

publicstringMD5Encrypt(stringstrIN)

{

//stringstrIN=getstrIN(strIN);

byte[]tmpByte;

MD5md5=newMD5CryptoServiceProvider();

tmpByte=puteHash(GetKeyByteArray(getstrIN(strIN)));

md5.Clear();

returnGetStringValue(tmpByte);

}

publicstringSHA1Encrypt(stringstrIN)

{

//stringstrIN=getstrIN(strIN);

byte[]tmpByte;

SHA1sha1=newSHA1CryptoServiceProvider();

tmpByte=puteHash(GetKeyByteArray(strIN));

sha1.Clear();

returnGetStringValue(tmpByte);

}

publicstringSHA256Encrypt(stringstrIN)

{

//stringstrIN=getstrIN(strIN);

byte[]tmpByte;

SHA256sha256=newSHA256Managed();

tmpByte=puteHash(GetKeyByteArray(strIN));

sha256.Clear();

returnGetStringValue(tmpByte);

}

publicstringSHA512Encrypt(stringstrIN)

{

//stringstrIN=getstrIN(strIN);

byte[]tmpByte;

SHA512sha512=newSHA512Managed();

tmpByte=puteHash(GetKeyByteArray(strIN));

sha512.Clear();

returnGetStringValue(tmpByte);

}

/**////<summary>

///使用DES加密(Addedbyniehl-4-6)

///</summary>

///<paramname="originalValue">待加密的字符串</param>

///<paramname="key">密钥(最大长度8)</param>

///<paramname="IV">初始化向量(最大长度8)</param>

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

publicstringDESEncrypt(stringoriginalValue,stringkey,stringIV)

{

//将key和IV处理成8个字符

key+="12345678";

IV+="12345678";

key=key.Substring(0,8);

IV=IV.Substring(0,8);

SymmetricAlgorithmsa;

ICryptoTransformct;

MemoryStreamms;

CryptoStreamcs;

byte[]byt;

sa=newDESCryptoServiceProvider();

sa.Key=Encoding.UTF8.GetBytes(key);

sa.IV=Encoding.UTF8.GetBytes(IV);

ct=sa.CreateEncryptor();

byt=Encoding.UTF8.GetBytes(originalValue);

ms=newMemoryStream();

cs=newCryptoStream(ms,ct,CryptoStreamMode.Write);

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

cs.FlushFinalBlock();

cs.Close();

returnConvert.ToBase64String(ms.ToArray());

}

publicstringDESEncrypt(stringoriginalValue,stringkey)

{

returnDESEncrypt(originalValue,key,key);

}

/**////<summary>

///使用DES解密(Addedbyniehl-4-6)

///</summary>

///<paramname="encryptedValue">待解密的字符串</param>

///<paramname="key">密钥(最大长度8)</param>

///<paramname="IV">m初始化向量(最大长度8)</param>

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

publicstringDESDecrypt(stringencryptedValue,stringkey,stringIV)

{

//将key和IV处理成8个字符

key+="12345678";

IV+="12345678";

key=key.Substring(0,8);

IV=IV.Substring(0,8);

SymmetricAlgorithmsa;

ICryptoTransformct;

MemoryStreamms;

CryptoStreamcs;

byte[]byt;

sa=newDESCryptoServiceProvider();

sa.Key=Encoding.UTF8.GetBytes(key);

sa.IV=Encoding.UTF8.GetBytes(IV);

ct=sa.CreateDecryptor();

byt=Convert.FromBase64String(encryptedValue);

ms=newMemoryStream();

cs=newCryptoStream(ms,ct,CryptoStreamMode.Write);

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

cs.FlushFinalBlock();

cs.Close();

returnEncoding.UTF8.GetString(ms.ToArray());

}

publicstringDESDecrypt(stringencryptedValue,stringkey)

{

returnDESDecrypt(encryptedValue,key,key);

}

privatestringGetStringValue(byte[]Byte)

{

stringtmpString="";

if(this.isReturnNum==false)

{

ASCIIEncodingAsc=newASCIIEncoding();

tmpString=Asc.GetString(Byte);

}

else

{

intiCounter;

for(iCounter=0;iCounter<Byte.Length;iCounter++)

{

tmpString=tmpString+Byte[iCounter].ToString();

}

}

returntmpString;

}

privatebyte[]GetKeyByteArray(stringstrKey)

{

ASCIIEncodingAsc=newASCIIEncoding();

inttmpStrLen=strKey.Length;

byte[]tmpByte=newbyte[tmpStrLen-1];

tmpByte=Asc.GetBytes(strKey);

returntmpByte;

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。