数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 2848|回复: 2

用C#实现的数据加密

[复制链接]
b
发表于 2004-5-28 04:19:40 | 显示全部楼层 |阅读模式
<><b><FONT size=4>用C#实现的数据加密 —— 对称加密算法</FONT></b></P>
<><FONT size=3>以下是关于对称加密算法的C#实现代码,大家可以根据需要更改不同的算法,文中以Rijndael算法为例: </FONT></P>
< align=left> </P>
<DIV class=quote>
<P align=left>using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;</P>
<P align=left>namespace DataCrypto
{
/// &lt;summary&gt;
/// 对称加密算法类
/// &lt;/summary&gt;
public class SymmetricMethod
{
  
  private SymmetricAlgorithm mobjCryptoService;
  private string Key;
  /// &lt;summary&gt;
  /// 对称加密类的构造函数
  /// &lt;/summary&gt;
  public SymmetricMethod()
  {
   mobjCryptoService = new RijndaelManaged();
   Key = "Guz(%&amp;hj7x89H$yuBI0456FtmaT5&amp;fvHUFCy76*h%(HilJ$lhj!y6&amp;(*jkP87jH7";
  }
  /// &lt;summary&gt;
  /// 获得密钥
  /// &lt;/summary&gt;
  /// &lt;returns&gt;密钥&lt;/returns&gt;
  private byte[] GetLegalKey()
  {
   string sTemp = Key;
   mobjCryptoService.GenerateKey();
   byte[] bytTemp = mobjCryptoService.Key;
   int KeyLength = bytTemp.Length;
   if (sTemp.Length &gt; KeyLength)
    sTemp = sTemp.Substring(0, KeyLength);
   else if (sTemp.Length &lt; KeyLength)
    sTemp = sTemp.PadRight(KeyLength, ' ');
   return ASCIIEncoding.ASCII.GetBytes(sTemp);
  }
  /// &lt;summary&gt;
  /// 获得初始向量IV
  /// &lt;/summary&gt;
  /// &lt;returns&gt;初试向量IV&lt;/returns&gt;
  private byte[] GetLegalIV()
  {
   string sTemp = "E4ghj*Ghg7!rNIfb&amp;95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&amp;!hg4ui%$hjk";
   mobjCryptoService.GenerateIV();
   byte[] bytTemp = mobjCryptoService.IV;
   int IVLength = bytTemp.Length;
   if (sTemp.Length &gt; IVLength)
    sTemp = sTemp.Substring(0, IVLength);
   else if (sTemp.Length &lt; IVLength)
    sTemp = sTemp.PadRight(IVLength, ' ');
   return ASCIIEncoding.ASCII.GetBytes(sTemp);
  }
  /// &lt;summary&gt;
  /// 加密方法
  /// &lt;/summary&gt;
  /// &lt;param name="Source"&gt;待加密的串&lt;/param&gt;
  /// &lt;returns&gt;经过加密的串&lt;/returns&gt;
  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);
  }
  /// &lt;summary&gt;
  /// 解密方法
  /// &lt;/summary&gt;
  /// &lt;param name="Source"&gt;待解密的串&lt;/param&gt;
  /// &lt;returns&gt;经过解密的串&lt;/returns&gt;
  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();
  }
}
}</P></DIV>
b
 楼主| 发表于 2004-5-28 04:20:05 | 显示全部楼层
<><b><FONT size=4>用C#实现的数据加密(二) —— 哈希算法</FONT></b></P><> 以下是用C#实现的哈希加密,大家可以根据自己的需要更改所需的算法,文中以SHA1为例:</P><DIV class=quote>< align=left>using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;</P><P align=left>namespace DataCrypto
{
/// &lt;summary&gt;
/// 哈希加密类
/// &lt;/summary&gt;
public class HashMethod
{
  
  private HashAlgorithm HashCryptoService;
  /// &lt;summary&gt;
  /// 哈希加密类的构造函数
  /// &lt;/summary&gt;
  public HashMethod()
  {
   HashCryptoService = new SHA1Managed();
  }
  /// &lt;summary&gt;
  /// 加密方法
  /// &lt;/summary&gt;
  /// &lt;param name="Source"&gt;待加密的串&lt;/param&gt;
  /// &lt;returns&gt;经过加密的串&lt;/returns&gt;
  public string Encrypto(string Source)
  {
   byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
   byte[] bytOut = HashCryptoService.ComputeHash(bytIn);
   return Convert.ToBase64String(bytOut);
  }
}
}</P></DIV>
发表于 2004-7-17 16:18:48 | 显示全部楼层
<>好强!</P>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 12:57 , Processed in 0.051773 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表