| 订阅 | 在线投稿
分享
 
 
 

C#可逆加密算法收集

2008-12-13 08:24:28  编辑来源:互联网  宽屏版  评论

最近要用到这个顺带收集下

以下是关于对称加密算法的C#实现代码,大家可以根据需要更改不同的算法,文中以Rijndael算法为例:view plaincopy to clipboardprint?

using System;

using System.IO;

using System.Security.Cryptography;

using System.Text;

namespace DataCrypto

{

/// <summary>

/// 对称加密算法类

/// </summary>

public class SymmetricMethod

{

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();

}

}

}

最近要用到这个顺带收集下 以下是关于对称加密算法的C#实现代码,大家可以根据需要更改不同的算法,文中以Rijndael算法为例:view plaincopy to clipboardprint? using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace DataCrypto { /// <summary> /// 对称加密算法类 /// </summary> public class SymmetricMethod { 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(); } } }
󰈣󰈤
 
 
 
>>返回首页<<
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 热帖排行
 
 
王朝网络微信公众号
微信扫码关注本站公众号wangchaonetcn
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
©2005- 王朝网络 版权所有