国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

.Net 常用加密算法類

2024-07-10 13:05:32
字體:
來源:轉載
供稿:網友
 

.net框架由于擁有clr提供的豐富庫支持,只需很少的代碼即可實現先前使用c等舊式語言很難實現的加密算法。本類實現一些常用機密算法,供參考。其中md5算法返回int的tostring字串。返回數字字母型結果的算法參見之前blog文章。

using system;
using system.io;
using system.data;
using system.text;
using system.diagnostics;
using system.security;
using system.security.cryptography;

namespace com.quickline.encrypt
{
 /// <summary>
 /// 類名:hashencrypt
 /// 作用:對傳入的字符串進行hash運算,返回通過hash算法加密過的字串。
 /// 屬性:[無]
 /// 構造函數額參數:
 /// isreturnnum:是否返回為加密后字符的byte代碼
 /// iscasesensitive:是否區分大小寫。
 /// 方法:此類提供md5,sha1,sha256,sha512等四種算法,加密字串的長
度依次增大。
 /// </summary>
 public class hashencrypt
 {
  //private string strin;
  private bool isreturnnum;
  private bool iscasesensitive;
  
  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">密鑰(最大長度8)</param>
  /// <param name="iv">初始化向量(最大長度8)</param>
  /// <returns>加密后的字符串</returns>
  public string desencrypt(string originalvalue,string key,string iv)
  {
   //將key和iv處理成8個字符
   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">密鑰(最大長度8)</param>
  /// <param name="iv">m初始化向量(最大長度8)</param>
  /// <returns>解密后的字符串</returns>
  public string desdecrypt(string encryptedvalue,string key,string iv)
  {
   //將key和iv處理成8個字符
   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;

  }

 }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁海县| 大理市| 自贡市| 长岛县| 多伦县| 克拉玛依市| 大埔县| 美姑县| 城市| 庆阳市| 辽宁省| 涿州市| 梁山县| 绥德县| 杨浦区| 栾川县| 施秉县| 澎湖县| 搜索| 绵竹市| 宿迁市| 芮城县| 右玉县| 佛教| 长宁县| 枞阳县| 城步| 金湖县| 永福县| 长海县| 宿州市| 安阳市| 象州县| 绥德县| 泾源县| 大埔区| 上林县| 安吉县| 买车| 建始县| 永春县|