写网络编程时,需要保存用户的用户名和密码,防止被盗用或者误用。目前计较安全的做法是:Md5+salt。

md5简单讲就是单向不可逆散列。如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码。

加Salt可以一定程度上解决这一问题。所谓加Salt方法,就是加点“佐料”。其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,再比较散列值,已确定密码是否正确。

用户注册时,

用户输入【账号】和【密码】(以及其他用户信息);

系统为用户生成【Salt值】;

系统将【Salt值】和【用户密码】连接到一起;

对连接后的值进行散列,得到【Hash值】;

将【Hash值1】和【Salt值】分别放到数据库中。

用户登录时,

用户输入【账号】和【密码】;

系统通过用户名找到与之对应的【Hash值】和【Salt值】;

系统将【Salt值】和【用户输入的密码】连接到一起;

对连接后的值进行散列,得到【Hash值2】(注意是即时运算出来的值);

比较【Hash值1】和【Hash值2】是否相等,相等则表示密码正确,否则表示密码错误。

golang提供了md5包可以供直接调用。以下程序演示了使用当前时间作为salt的md5+salt加密过程。

package main

import (
"crypto/md5"
"encoding/hex"
"fmt"
"time"
)

func main() {
salt := time.Now().Unix()
m5 := md5.New()
m5.Write([]byte("Mi Ma"))
m5.Write([]byte(string(salt)))
st := m5.Sum(nil)
fmt.Println(st, hex.EncodeToString(st))

}

golang Md5+salt相关推荐

  1. Shiro+springboot+mybatis+EhCache(md5+salt+散列)认证与授权-03

    从上文:Shiro+springboot+mybatis(md5+salt+散列)认证与授权-02 当每次进行刷新时,都会从数据库重新查询数据进行授权操作,这样无疑给数据库造成很大的压力,所以需要引入 ...

  2. Shiro+springboot+mybatis(md5+salt+散列)认证与授权-02

    代码延续地址:Shiro+springboot+mybatis(md5+salt+散列)认证与授权-01 1.创建t_role角色表(比如管理员admin,普通用户user等),创建t_pers权限表 ...

  3. Shiro+springboot+mybatis(md5+salt+散列)认证与授权-01

    这个小项目包含了注册与登录,使用了springboot+mybatis+shiro的技术栈:当用户在浏览器登录时发起请求时,首先这一系列的请求会被拦截器进行拦截(ShiroFilter),然后拦截器根 ...

  4. shiro认证+授权(使用MD5+salt+散列加密)

    通过上文自定义realm分析源码可得https://blog.csdn.net/Kevinnsm/article/details/11183124 用户认证在doGetAuthenticationIn ...

  5. 应用密码学的笑话之MD5+Salt不安全

    这段时间诸多爆库的新闻,里面有许多饶有趣味的事情.那些用简单密码,或者一个密码走天下的笑话就不说了,咱说点有内涵的.(这篇文章是给IT界的人看的,如果你看不懂,我会准备一个简单的"如何辨别密 ...

  6. MD5 + salt 的加密算法

    2019独角兽企业重金招聘Python工程师标准>>> MD5 + salt 的加密算法   对于这次泄露门事件,因为本人的账号(CSDN)有在内所以很想说shit-同时觉得csdn ...

  7. Md5+salt实现用户加密

    一.md5 1.1 作用 一般用来进行加密或者签名 特点:md5内容不可逆,相同的内容不论执行多少次,md5加密算法生成的结果都是一致的. 结果:生成的结果是一个32位的16进制字符串. 二 md5+ ...

  8. 使用md5+salt+hash散列查询

    一.说明 1.分析 通过MD5+salt+hash散列进行用户登录查询. 重点:(1)加密存储到数据库(2)验证登录用户信息和数据库信息是否一致 2.目录结构 二.范例 1.调用类 (1)代码块 pa ...

  9. 浅谈Md5+Salt加密

    一 为什么需要加密? 比如当前有个用户进行注册,他输入的账号密码是"ltl"和"123456",那么我们肯定要将账号密码保存到数据库中.在没有接触过" ...

最新文章

  1. java简单的ID生成器
  2. QIIME 2用户文档. 3老司机上路指南(2019.7)
  3. 【IT基础】常见的开发文档
  4. 量子计算机物理学,百年的超越:量子物理学与量子计算机
  5. android 自定义图片上传,android自定义ImageView仿图片上传示例
  6. php post请求后端拿不到值_PHP Post获取不到非表单数据的问题解决办法
  7. 自动驾驶使用贝塞尔曲线进行动态障碍物避障测试
  8. IDEA 快速创建 SpringBoot 项目
  9. Axure基本使用(一)
  10. 5V转3V的降压芯片和LDO
  11. amd编码器 hevc_支持 AMD VCE H.264 编码器在Bandicam录制视频 - Bandicam(班迪录屏)
  12. STL 常用容器(1)--string
  13. 女子租房有钱交房租 男中介竟然不收她钱_无界财富
  14. jsp怎么设置页面背景
  15. html 数字变成图片,从100到1000数字表图片
  16. c++ bind函数
  17. 五行Python自动换你的电脑桌面壁纸(内附源码和exe)
  18. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 20 章 客户端认证
  19. fresco混淆问题
  20. 2016计算机技能大赛,教育部关于公布2016年全国职业院校技能大赛获奖名单的通知...

热门文章

  1. 图像特征提取三大法宝:HOG特征、LBP特征、Haar-like特征
  2. 数据挖掘实战(5):实战篇
  3. 在日本做开发的日子(生活-用和行)
  4. 用ffmpeg剪辑视频(无编码变化快速切割)(带有快速无转码批量剪辑视频工具下载)
  5. Linux开机关闭防火墙端口
  6. 常用的AI人工智能算法库
  7. win95游戏移植linux,中国网友成功将Win95系统移植入iPhone6 Plus
  8. Pointnet2_pytorch代码复现
  9. 中南大学计算机英语统考每年题目一样吗,2020考研只剩96天,2019中南大学计算机考研真题回忆篇...
  10. C语言-文件操作-练习