博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF初见之Salt+Hash加密
阅读量:7219 次
发布时间:2019-06-29

本文共 4923 字,大约阅读时间需要 16 分钟。

最近要对密码进行Salt加密,故查看了相关资料,其实就是把需要加密的值先和随机的Salt值连接在一起,再进行加密(可以哈希,也可以MD5加密等等)。

下面是具体步骤:

1.先创建相关数据库:

--创建数据库表Salt_EncryptionCREATE TABLE Salt_Encryption(Name             VARCHAR(15) PRIMARY KEY NOT NULL,        --用户名[Password]         VARCHAR(50) NOT NULL,                    --密码Salt             VARCHAR(10) NOT NULL                    --Salt值)

2.新建一个Salt_Encryption_WCF的WCF应用程序,因为要用到数据库,所以先创建一个名为SaltModel.edmx的实体类:

然后跟着步骤来就可以了

3.创建服务契约和创建服务:

(1)IService1.cs (创建服务契约):

 

using System;using System.Collections.Generic;using System.ServiceModel;namespace Salt_Encryption_WCF{        [ServiceContract]    public interface IService1    {         /***********************************密码加密*********************************************************/        // 创建一个随机的Salt值        [OperationContract]        string CreateSalt();        //对Salt后的密码进行哈希        [OperationContract]        string CreatePasswordHash(string pwd, string strSalt);        /*************************************数据库操作********************************************/        // 新增数据        [OperationContract]        void insertSql(string strName, string strPwd, string Salt);        // 查询数据        [OperationContract]        IEnumerable
selectSql(); }}

(2)Service1.svc (创建服务)

using System;using System.Collections.Generic;using System.Linq;using System.ServiceModel;using System.Web.Security;using System.Security.Cryptography;namespace Salt_Encryption_WCF{        public class Service1 : IService1    {        /***********************************密码加密*********************************************************/        private const int saltLenght = 4;  //定义Salt值的长度        ///         /// 创建一个随机的Salt值        ///         /// 
随机数的字符串
public string CreateSalt() { //生成一个加密的随机数 RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); byte[] buff = new byte[saltLenght]; rng.GetBytes(buff); //返回一个Base64随机数的字符串 return Convert.ToBase64String(buff); } /// /// 对Salt后的密码进行哈希 /// /// 密码 /// Salt值 ///
返回加密好的密码
public string CreatePasswordHash(string pwd,string strSalt) { //把密码和Salt连起来 string saltAndPwd = String.Concat(pwd,strSalt); //对密码进行哈希 string hashenPwd = FormsAuthentication.HashPasswordForStoringInConfigFile(saltAndPwd,"sha1"); //返回哈希后的值 return hashenPwd; } /*************************************数据库操作********************************************/ SaltEnEntities db = new SaltEnEntities(); /// /// 新增数据 /// /// 用户名 /// 密码 /// Salt值 public void insertSql(string strName,string strPwd,string strSalt) { Salt_Encryption s = new Salt_Encryption(); s.Name = strName; s.Password = strPwd; s.Salt = strSalt; //添加数据 db.Salt_Encryption.AddObject(s); //保存数据的改变 db.SaveChanges(); } /// /// 查询数据 /// ///
public IEnumerable
selectSql() { IEnumerable
sql = from info in db.Salt_Encryption select info; return sql; } }}

4.然后新建一个名为Test2Salt的Web客户端(用于测试),先引用创建的WCF服务,具体过程见,然后进行Web端的代码编写:

(1)Test2SaltForm.aspx(Web界面代码)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test2SaltForm.aspx.cs" Inherits="Test2Salt.Test2SaltForm" %>        

(2)Test2SaltForm.aspx.cs(功能实现代码)

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace Test2Salt{    public partial class Test2SaltForm : System.Web.UI.Page    {        host.Service1Client host = new host.Service1Client();        protected void Page_Load(object sender, EventArgs e)        {            if (!IsPostBack) { DataPageBind(); }        }        private void DataPageBind()        {            //绑定数据,并显示数据            gv.DataSource = host.selectSql();            gv.DataBind();        }        protected void InsertData_Click(object sender, EventArgs e)        {            string strName = toName.Text.Trim();            string strPwd = toPassword.Text.Trim();            //得到Salt值            string Salt = host.CreateSalt();            //得到加密后的密码            string Pwd = host.CreatePasswordHash(strPwd,Salt);            host.insertSql(strName,Pwd,Salt);            DataPageBind();        }    }}

5.效果图如下:

 

PS:如果想验证用户名和密码的话,只要获取数据库中的Salt值,对你输入的密码进行加密,然后和数据库中的密码进行对比就可以了。

本文转自叶超Luka博客园博客,原文链接:http://www.cnblogs.com/yc-755909659/archive/2012/06/26/2563134.html,如需转载请自行联系原作者
你可能感兴趣的文章
Oracle 查询结果去重保留一项
查看>>
Gradle-jar-aar
查看>>
PowerShell 如何 远程连接
查看>>
当信息安全遇上应用交付
查看>>
“中国经济脱轨论”是小人之言
查看>>
WinCE6.0 Camera驱动整体结构
查看>>
【QTP】截图操作
查看>>
[stonith.8] Error 5 [ha_logger.1] Error 5
查看>>
C++任意类型转换模板
查看>>
win7访问2003共享很慢
查看>>
我的友情链接
查看>>
笨笨笨 怎么老是记不住呢??
查看>>
Linux Shell编程入门
查看>>
linux系统批量格式化磁盘
查看>>
修改远程访问端口
查看>>
我的友情链接
查看>>
职业生涯规划需要考虑的三大要点
查看>>
完全用linux ---学生感受
查看>>
Exchange 的 Powershell批量创建AD账户和邮箱
查看>>
Android四大组件之service
查看>>