zoukankan      html  css  js  c++  java
  • C# 哈希加密

    1.方法一:

    [c-sharp] view plaincopy
    1. //适用于C#语言   
    2. //使用前需导入以下命名空间:using System.Web.Security;   
    3. //第一个参数为需加密的字符串,第二个参数为加密的格式(只有SHA1和MD5两种,可任选一种)  
    4. public string EncryptPassword(string PasswordString, string PasswordFormat)  
    5.     {  
    6.         string EncryptPassword = null;  
    7.         if ("SHA1".Equals(PasswordFormat))  
    8.         {  
    9.             EncryptPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(PasswordString, "SHA1");  
    10.         }  
    11.         else if ("MD5".Equals(PasswordFormat))  
    12.         {  
    13.             EncryptPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(PasswordString, "MD5");  
    14.         }  
    15.         else  
    16.         {  
    17.             EncryptPassword = PasswordString;  
    18.         }  
    19.         return EncryptPassword;  
    20.     }  
    21.   
    22.   
    23. //======================加密解密方法=====================  
    24.   
    25. using System;  
    26. using System.Security.Cryptography;  
    27. using System.IO;  
    28. using System.Text;/**//// <summary>  
    29.         /// DEC 加密过程  
    30.         /// </summary>  
    31.         /// <param name="pToEncrypt">被加密的字符串</param>  
    32.         /// <param name="sKey">密钥(只支持8个字节的密钥)</param>  
    33.         /// <returns>加密后的字符串</returns>  
    34.         public string Encrypt(string pToEncrypt, string sKey)  
    35.         ...{  
    36.             //访问数据加密标准(DES)算法的加密服务提供程序 (CSP) 版本的包装对象  
    37.             DESCryptoServiceProvider des = new DESCryptoServiceProvider();   
    38.             des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); //建立加密对象的密钥和偏移量  
    39.             des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);  //原文使用ASCIIEncoding.ASCII方法的GetBytes方法  
    40.   
    41.             byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);//把字符串放到byte数组中  
    42.   
    43.             MemoryStream ms = new MemoryStream();//创建其支持存储区为内存的流   
    44.             //定义将数据流链接到加密转换的流  
    45.             CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);  
    46.             cs.Write(inputByteArray, 0, inputByteArray.Length);  
    47.             cs.FlushFinalBlock();  
    48.             //上面已经完成了把加密后的结果放到内存中去  
    49.   
    50.             StringBuilder ret = new StringBuilder();  
    51.             foreach (byte b in ms.ToArray())  
    52.             ...{  
    53.                 ret.AppendFormat("{0:X2}", b);  
    54.             }  
    55.             ret.ToString();  
    56.             return ret.ToString();  
    57.         }  
    58.   
    59.        /**//**//**//// <summary>  
    60.         /// DEC 解密过程  
    61.        /// </summary>  
    62.         /// <param name="pToDecrypt">被解密的字符串</param>  
    63.         /// <param name="sKey">密钥(只支持8个字节的密钥,同前面的加密密钥相同)</param>  
    64.        /// <returns>返回被解密的字符串</returns>  
    65.         public string Decrypt(string pToDecrypt, string sKey)  
    66.         ...{  
    67.             DESCryptoServiceProvider des = new DESCryptoServiceProvider();  
    68.   
    69.             byte[] inputByteArray = new byte[pToDecrypt.Length / 2];  
    70.             for (int x = 0; x < pToDecrypt.Length / 2; x++)  
    71.             ...{  
    72.                 int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));  
    73.                 inputByteArray[x] = (byte)i;  
    74.             }  
    75.   
    76.             des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); //建立加密对象的密钥和偏移量,此值重要,不能修改  
    77.             des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);  
    78.             MemoryStream ms = new MemoryStream();  
    79.             CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);  
    80.   
    81.             cs.Write(inputByteArray, 0, inputByteArray.Length);  
    82.             cs.FlushFinalBlock();  
    83.   
    84.             //建立StringBuild对象,createDecrypt使用的是流对象,必须把解密后的文本变成流对象  
    85.             StringBuilder ret = new StringBuilder();   
    86.   
    87.             return System.Text.Encoding.Default.GetString(ms.ToArray());  
    88.         }  

    具体在程序中使用加密解密算法的例子如下: 在发送页面 Response.Redirect("~/GridView.aspx?ID=" + Encrypt("zlh","abcdefgh"));

     

    在接受页面 string acceptStr; acceptStr = Decrypt(Request.QueryString["ID"],"abcdefgh");

    转贴来源:http://hi.baidu.com/4092887/blog/item/4dfd89efaf805ee5cf1b3e5a.html

     

    2.方法二:(简单)

      FormsAuthentication.HashPasswordForStoringInConfigFile(string, "SHA1");

     或

     FormsAuthentication.HashPasswordForStoringInConfigFile(String, "MD5");

  • 相关阅读:
    Java中Calendar.DAY_OF_WEEK需要减一的原因
    类变量方法,局部变量和成员变量的区别(this关键字的使用)
    简述位移运算符(二进制转换示例)
    Java循环结构之while和do-while循环
    在MyEclipse中使用javadoc导出API文档详解
    js控制input type=checkbox 的勾选
    DWZ框架一些技巧
    三层规则嵌套逻辑勾选
    关于DWZ模板中全选的使用
    关于针对不同需求。又不需要改之前代码的一个列子
  • 原文地址:https://www.cnblogs.com/armyfai/p/3544949.html
Copyright © 2011-2022 走看看