C#.NET  开发ASP.NET  (要求的加密级别是普通的就可以了)
在SQL SERVER 中建立了一个用户帐户表; 里边有用户帐户,及密码字段都是 NVARCHAR(20)类型; 现我想对该密码字段进行加密, 以便别人查看SQL SERVER 数库时看到的密码内容是加密过后的;请大家帮帮忙, 给出一个加密及解密还原的实例程序吧.  先谢谢了!

解决方案 »

  1.   

    class Password
    {
      // 比较两个 byte []
      public static bool CompareBytes(byte [] b1, byte [] b2)
      {
        if (b1 == null || b2 == null || b1.Length != b2.Length) return false;
        for (int i = 0; i < b1.Length; i++)
        {
          if (b1[i] != b2[i]) return false;
        }
        return true;
      }  // 输入 byte [],返回 string
      public static string BytesToHexString(byte [] bs)
      {
        StringBuilder sb = new StringBuilder(64);
        foreach (byte b in bs)
        {
          sb.AppendFormat("{0:X2}", b);
        }
        return sb.ToString();
      }  // 对字符串进行加密,输入明文,返回 byte[] 密文
      public static byte [] PwdBytes(string s)
      {
        return (new MD5CryptoServiceProvider()).ComputeHash(Encoding.UTF8.GetBytes(s));
      }  // 对字符串进行加密,输入明文,返回 string 密文
      public static string PwdString(string s)
      {
        return BytesToHexString(PwdBytes(s));
      }
    }
      

  2.   

    这是我在项目中用的md5加密类,你用吧/*************************************************************************
     *  Copyright(C) 2004-2005 ******** All Rights Reserved.
     ************************************************************************/using System;
    using System.Text;
    using System.IO;
    using System.Security.Cryptography;namespace CryptionDataMD5
    {
    /// <summary>
    /// Make message digest based on MD5 for byte array and string 
    /// </summary>
    /// <Author>Yao</Author>
    /// <Date>2005/06/13</Date>
    public class CryptionDataMD5
    {
    /// <summary>
    /// Make message digest based on MD5 for byte array
    /// </summary>
    /// <param name="origin">source byte array</param>
    /// <returns>message digest</returns>
    public static string EncryptionByteData(byte[] SourceData)
    {
    try 
    {
    //create a stream object
    MemoryStream stream = new MemoryStream(SourceData);

    //define hex table
    const string HEX_TABLE = "0123456789abcdef";

    //create a MD5CryptoServiceProvider object
    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
    //Calculate MD5 Checksum
    byte[] hashData = md5.ComputeHash(stream); //convert to string
    StringBuilder sb=new StringBuilder();
    sb.Length =hashData.Length *2;

    //make string sb
    for(int i=0;i<hashData.Length ;i++)
    {
    sb[i*2]=HEX_TABLE[hashData[i]>>4];
    sb[i*2+1]=HEX_TABLE[hashData[i] & 0xF];
    }

    return sb.ToString();
    }
    catch (Exception ex)
    {
    throw ex;
    }
    } /// <summary>
    /// /// Make message digest based on MD5 for string
    /// </summary>
    /// <param name="origin">source string</param>
    /// <returns>message digest</returns>
    public static string EncryptionStringData(string SourceData) 
    {
    string messageDigest = string.Empty;
    try 
    {
    byte[] sorData = Encoding.Default.GetBytes(SourceData);
    messageDigest = EncryptionByteData(sorData);
    }
    catch(Exception ex)
    {
    throw ex;
    }
    return messageDigest;
    }
    }
    }
      

  3.   

    // 对字符串进行加密,输入明文,返回 byte[] 密文
      public static byte [] PwdBytes(string s)
      {
        return (new MD5CryptoServiceProvider()).ComputeHash(Encoding.UTF8.GetBytes(s));
      }------------------------------------------------------------------------------
    那么输入密文, 返回明文呢?  请wuyi8808(空间/IV) 把该函数补上给我  谢
      

  4.   

    要把密文还原的话,采用DES,TripleDES算法加密解密即可
      

  5.   

    建议用MD5一类的HASH加密方法,这样即使源代码被人看了也很难破出来
      

  6.   

    如果别人能看到你数据库里的密码密文,他应该也能修改你这个密文。
    1。通过你的系统修改一下任意一个用户,如用户A的密码,比如将其密码修改为“111”,则可以在数据库里该用户密码项得到一个密码密文“×××”
    2。将他想利用的用户B的密码密文修改成“×××”,那么用户B的密码也就变成“111”啦。所以,我想是否可以在生成密码密文的时候加上用户名信息,这样,不同的用户名,即使密码一样,但是密码密文也不一样。
    这样一来,应该可以解决通过修改数据库密码密文来修改用户密码的问题。
      

  7.   

    楼上的方法可行。TextBox longinName;
    TextBox password;string passwordText = Password.PwdString(loginName.Text.Trim() + password.Text.Trim() + "AnyString");