C#密码加密

EncryptPassWord类:

using  System;
using  System.Data;
using  System.Configuration;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
using  System.Security.Cryptography;
using  System.Text;

public   class  EncryptPassWord
{
    
///   <summary>
    
///  获取密钥
    
///   </summary>
    
///   <returns></returns>
     public   static   string  CreateSalt()
    {
        
byte [] data  =   new   byte [ 8 ];
        
new  RNGCryptoServiceProvider().GetBytes(data);
        
return  Convert.ToBase64String(data);
    }

    
///   <summary>
    
///  加密密码
    
///   </summary>
    
///   <param name="pwdString"></param>
    
///   <param name="salt"></param>
    
///   <returns></returns>
     public   static   string  EncryptPwd( string  pwdString,  string  salt)
    {
        
if  (salt  ==   null   ||  salt  ==   "" )
        {
            
return  pwdString;
        }
        
byte [] bytes  =  Encoding.Unicode.GetBytes(salt.ToLower().Trim()  +  pwdString.Trim());
        
return  BitConverter.ToString(((HashAlgorithm)CryptoConfig.CreateFromName( " SHA1 " )).ComputeHash(bytes));
    }
}

 

 

DESEncrypt类:

using  System;
using  System.Data;
using  System.Configuration;
using  System.Web;
using  System.Web.Security;
using  System.Security.Cryptography;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
using  System.IO;
using  System.Text;
///   <summary>
///  Summary description for DESEncrypt
///   </summary>
public   class  DESEncrypt
{
    
private   string  iv  =   " 12345678 " ;
    
private   string  key  =   " 12345678 " ;
    
private  Encoding encoding  =   new  UnicodeEncoding();
    
private  DES des;

    
public  DESEncrypt()
    {
        des 
=   new  DESCryptoServiceProvider();
    }

    
///   <summary>
    
///  设置加密密钥
    
///   </summary>
     public   string  EncryptKey
    {
        
get  {  return   this .key; }
        
set
        {
            
this .key  =  value;
        }        
    }

    
///   <summary>
    
///  要加密字符的编码模式
    
///   </summary>
     public  Encoding EncodingMode
    {
        
get  {  return   this .encoding; }
        
set  {  this .encoding  =  value; }
    }

    
///   <summary>
    
///  加密字符串并返回加密后的结果
    
///   </summary>
    
///   <param name="str"></param>
    
///   <returns></returns>
     public   string  EncryptString( string  str)
    {
        
byte [] ivb  =  Encoding.ASCII.GetBytes( this .iv);
        
byte [] keyb  =  Encoding.ASCII.GetBytes( this .EncryptKey); // 得到加密密钥
         byte [] toEncrypt  =   this .EncodingMode.GetBytes(str); // 得到要加密的内容
         byte [] encrypted;
        ICryptoTransform encryptor 
=  des.CreateEncryptor(keyb, ivb);
        MemoryStream msEncrypt 
=   new  MemoryStream();
        CryptoStream csEncrypt 
=   new  CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
        csEncrypt.Write(toEncrypt, 
0 , toEncrypt.Length);
        csEncrypt.FlushFinalBlock();
        encrypted 
=  msEncrypt.ToArray();
        csEncrypt.Close();
        msEncrypt.Close();
        
return   this .EncodingMode.GetString(encrypted);
    }
}

 

1.原理:每次产生一个随机字符串作为密匙,用户输入一个密码,密码经过密匙加密得到一个字符串存放在数据库中...当需要验证密码时,要先得到密匙才能验证.

  (1).登录时,验证代码

 

// 根据用户名得到用户信息       
 DataTable dt  =  WYTWeb.UserDAO.UserLogin(userName);
 
if  (dt.Rows.Count  ==   0 )
 {
    
return   - 2 ; // 用户不存在
 }

 DataRow row 
=  dt.Rows[ 0 ];
 
// 得到密匙
  string  salt  =  row[ " salt " ].ToString();
 
// 验证密码是否正确
  if  (EncryptPassWord.EncryptPwd(password, salt)  ==  row[ " password " ].ToString())
 {
      
// 登录成功
 }

 

(2)修改密码时(与插入一条新密码一样)

 

  // 从基类获得登录id
  int  userId  =  LoginUser_Id;
 
// 获得密匙
  string  salt  =  EncryptPassWord.CreateSalt();
 
// 得到经过加密后的"密码"
  string  password  =  EncryptPassWord.EncryptPwd(txtPassword.Text.Trim(), salt);
 
// 修改原数据
  int  result  =  WYTWeb.UserDAO.EditPassword(userId, password, salt);
 
if  (result  >   0 )
 {
     WYTWeb.LogDAO.InsertLog(
" info " , " wytWeb " , " 用户 " + userId + " 修改了密码 " , userId , this .Request.UserHostAddress.ToString());
     ShowMessage(
" 密码修改成功 " );
           
// this.Response.Redirect("CompanyInfo.aspx"); 
 }
 
else
 {
    WYTWeb.LogDAO.InsertLog(
" info " " wytWeb " " 用户 "   +  userId  +   " 修改密码失败 " , userId,  this .Request.UserHostAddress.ToString());
    ShowMessage(
" 密码修改失败 " );
 }

 

 

 

 

 

转载于:https://www.cnblogs.com/9421/archive/2010/02/21/1670682.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值