前言
MD5加盐加密
提示:以下是本篇文章正文内容,下面案例可供参考
一、MD5加盐加密是什么?
MD5(Message Digest Algorithm 5),是一种散列算法,是不可逆的,即通过md5加密之后没办法得到原文,没有解密算法。
如果要使用MD5加盐加密,首先要引用MD5加密类库 我引用的是CommonHelper类库
类库如下
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
namespace HPIT.RentHouse.Common
{
public class CommonHelper
{
/// <summary>
/// MD5加密
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string CalcMD5(string str)
{
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(str);
return CalcMD5(bytes);
}
public static string CalcMD5(byte[] bytes)
{
using (MD5 md5 = MD5.Create())
{
byte[] computeBytes = md5.ComputeHash(bytes);
string result = "";
for (int i = 0; i < computeBytes.Length; i++)
{
result += computeBytes[i].ToString("X").Length == 1 ? "0" + computeBytes[i].ToString("X") : computeBytes[i].ToString("X");
}
return result;
}
}
public static string CalcMD5(Stream stream)
{
using (MD5 md5 = MD5.Create())
{
byte[] computeBytes = md5.ComputeHash(stream);
string result = "";
for (int i = 0; i < computeBytes.Length; i++)
{
result += computeBytes[i].ToString("X").Length == 1 ? "0" + computeBytes[i].ToString("X") : computeBytes[i].ToString("X");
}
return result;
}
}
//获取盐(用户登录密码)+生成验证码文字
public static string CreateVerifyCode(int len)
{
char[] data = { 'a','c','d','e','f','h','k','m',
'n','r','s','t','w','x','y'};
StringBuilder sb = new StringBuilder();
Random rand = new Random();
for (int i = 0; i < len; i++)
{
int index = rand.Next(data.Length);//[0,data.length)
char ch = data[index];
sb.Append(ch);
}
return sb.ToString();
}
public static string GetServerIP()
{
return ConfigurationManager.AppSettings["picUrl"].ToString();
}
public static string GetStaticPage()
{
return ConfigurationManager.AppSettings["staticPageUrl"].ToString();
}
/// <summary>
/// 生成html页面。页面静态化用
/// </summary>
/// <param name="context">当前的控制器</param>
/// <param name="viewPath">视图的路径</param>
/// <param name="model">viewmodel</param>
/// <returns></returns>
public static string RenderViewToString(ControllerContext context,
string viewPath,
object model = null)
{
ViewEngineResult viewEngineResult =
ViewEngines.Engines.FindView(context, viewPath, null);
if (viewEngineResult == null)
throw new FileNotFoundException("View" + viewPath + "cannot be found.");
var view = viewEngineResult.View;
context.Controller.ViewData.Model = model;
using (var sw = new StringWriter())
{
var ctx = new ViewContext(context, view,
context.Controller.ViewData,
context.Controller.TempData,
sw);
view.Render(ctx, sw);
return sw.ToString();
}
}
}
}
二、使用步骤
1.引入库 加盐加密一般使用在添加用户方法中
代码如下(示例):
//传入DTO模型:adminUserAddDTO
//利用EF架构添加字段
T_AdminUsers t_AdminUsers = new T_AdminUsers
{
CreateDateTime = DateTime.Now,
Name = adminUserAddDTO.Name,
IsDeleted = false,
LoginErrorTimes = 0,
PhoneNum = adminUserAddDTO.PhoneNum,
CityId = adminUserAddDTO.CityId,
Email = adminUserAddDTO.Email
};
//利用CommonHelper的方法对传入数据加盐加密
//加盐过程
t_AdminUsers.PasswordSalt = CommonHelper.CreateVerifyCode(5);
//利用MD5方法进行加密
t_AdminUsers.PasswordHash = CommonHelper.CalcMD5(adminUserAddDTO.Password + t_AdminUsers.PasswordSalt);
//将盐值存入到数据库,以及哈希值存入数据库
AdminDb.Add(t_AdminUsers);
总结
提示:这里对文章进行总结:
本文简单介绍对数据MD5加密过程,通过页面传值传入用户密码
利用CommonHelper类中的加盐过程,随机生成盐值,并将盐值存入到数据库以便于登陆验证,第一条代码是CommonHelper类库 直接复制即可,