使用go做后端,用户密码采取bcrpyt哈希加密

2023-05-16

bcrypt哈希由多个部分组成。这些部分用于确定创建哈希的设置,从而可以在不需要任何其他信息的情况下对其进行验证。相较于MD5,SHA-256等哈希算法更适合用于做密码的哈希,原因在于bcrypt算法哈希字符串的速度远远慢于上面列举的那些算法。这样即使整个用户密码库被用户盗用后想要通过彩虹表和暴力破解的方法猜测出用户的密码代价会非常高昂。

组成

Prefix+Cost+Salt+Hashed Text

Prefix说明了使用的bcrypt的版本
Cost是进行哈希的次数-数字越大生成bcrypt的速度越慢,成本越大。同样也意味着如果密码库被盗,攻击者想通过暴力破解的方法猜测出用户密码的成本变得越昂贵。
Salt是添加到要进行哈希的字符串中的随机字符(21.25个字符),所以使用bcrypt时不需要我们在表里单独存储Salt。
Hashed Text是明文字符串最终被bcrypt应用这些设置哈希后的哈希文本

如何使用

import ("golang.org/x/crypto/bcrypt")

bcrypt包只提供了三个函数:

CompareHashAndPassword():
用于比对bcrypt哈希字符串和提供的密码明文文本是否匹配。
GenerateFromPassword():
以给定的Cost返回密码的bcrypt哈希。如果给定的成本小于MinCost,则将成本设置为DefaultCost(10)。
Cost():
返回用于创建给定bcrypt哈希的哈希成本。将来密码系统为了应对更大的计算能力而增加哈希成本时,该功能可以用于确定哪些密码需要更新。

示例

// 密码加密
func (p *SysUser) PasswordHash(pwd string) (string, error) {
	bytes, err := bcrypt.GenerateFromPassword([]byte(pwd), bcrypt.DefaultCost)
	if err != nil {
		return "", err
	}

	return string(bytes), err
}

// 密码验证
func (p *SysUser) PasswordVerify(pwd string, hash string) bool {
	err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(pwd))

	return err == nil
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用go做后端,用户密码采取bcrpyt哈希加密 的相关文章

随机推荐

  • C# 实现RDP远程桌面连接

    C 实现RDP远程桌面连接 因为频繁的访问远程windows server服务器 xff0c 每次调出cmd运行mstsc xff0c 然后输入一大串信息去链接就显得有些繁琐了 为方便计 xff0c 于是使用C 编写一个小工具 功能相当简陋
  • 单片机小白学习之路(十七)---计算初值

    目标 xff1a 学会计算初值 1 为什么要初值 xff1f 给单片机的定时器赋初值是为了取得准确的自己需要的定时时间 xff0c 比如我想定时100秒 xff0c 你数0 255要256秒 xff08 最大定时长 xff09 xff0c
  • hadoop-hdfs初学之基本常用命令的IDEA实现

    刚开始学hadoop xff0c 大家一起加油 xff0c 再接再厉 span class token keyword package span span class token namespace com span class token
  • ubuntu20.04卸载virtualbox失败,“if your system is using efi secure boot you may need to sign the kernel “

    ubuntu20 04卸载virtualbox失败 xff0c 报错信息中有 if your system is using efi secure boot you may need to sign the kernel modules v
  • [算法]马走日

    题目描述 xff1a 在国际象棋中 xff0c 马的走法与中国象棋类似 xff0c 即俗话说的 马走日 xff0c 下图所示即国际象棋中马每一步能到达的格子 xff08 箭头所指为每步到达位置 xff09 现有一200 200大小的国际象棋
  • 咪咕盒子MGV2000电视盒子刷机教程

    第一步 xff1a 使用U盘里面新建文件夹重命名为 xff1a upgrade 第二步 xff1a 下载更新包放到uprade文件夹内 xff0c 下载地址 xff1a https download csdn net download cy
  • edge浏览器配置跨域完整流程-前端

    edge浏览器配置跨域完整流程 前端 1 在D盘下创建 edgeFile 新文件夹 2 进入edge文件位置 复制自己的edge 名字就叫dev 可以随便取 3 右键选中dev点击属性 配置edge的目标路径 C Program Files
  • oracle11g无法导出空表问题

    产生原因 xff1a oracle11g为了节约空间 xff0c 对空表不分配segment 解决方法 方法1 用如下语句设置空表可导出 xff1a alter system set deferred segment creation 61
  • 将dwg文件转为shp文件

    将dwg文件转为shp文件 xff08 包括dwg的注记转换 xff09 目的 xff1a 利用ArcGIS软件 将dwg文件中的面状要素转为shp格式 xff0c 并将dwg中的注记转换成shp文件中的字段 方法一 xff1a 1 将dw
  • ArcGIS坐标转换

    地理坐标系 xff1a 常用的地理坐标系 xff1a WGS84坐标系 CGCS2000坐标系 北京54坐标系 西安80坐标系 地理坐标系是是球面坐标系统 xff0c 通过经度 纬度 对地球表面点进行说明 不同地理坐标系的主要区别在于其采用
  • arcmap字段计算器的使用

    需求1 xff1a 某个要素类中的某个字段的数据前有空格 xff0c 需将空格批量删除 解决方法 xff1a 打开arcmap xff0c 添加图层 xff0c 选择开始编辑 xff08 如下图 xff09 选中图层 xff0c 右键打开属
  • ArcMap 数据的标注和注记

    标注 xff1a 可按照当前地图比例尺下的最佳位置重新加载 注记 xff1a 每条注记都存储自身的位置 注记可由标注转化而来 本文包括几种基本的标注方法 包括多属性字段标注 分类标注 分数型标注 道路名称标注等 多个属性字段标注 如下图 x
  • ArcMap 矢量数据空间校正

    功能 xff1a 将存在偏移 误差的数据进行校正 本文包括图形位移校正 橡皮拉伸 接边的操作方法 情况1 xff1a 两图层存在位置偏移 xff0c 现需校正其中一个数据 xff0c 使两个数据完全重合 Arcmap中放入两个数据 xff0
  • 【oracle报错】 exp-00106数据链接口令无效

    问题 xff1a 用exp导出数据库中的data 1表 xff0c 报错 exp 00106数据链接口令无效 xff0c 但其他表可正常导出 分析 xff1a 与无效dblink有关 解决过程 xff1a 用查询语句 select from
  • ARCGIS安装及卸载中遇见的一些问题

    1 提示无 netframework3 5 注意 xff1a 缺少 netframework3 5 安装4 5依旧无法安装arccgis desktop 解决方法 xff1a 计算机单击右键选择 管理 xff0c 在 服务管理器 中选择 添
  • ora-00972标识符过长

    ora 00972标识符过长 可能原因 xff1a Oracle中表名 xff0c 列名 xff0c 标识列字符不能超过30个字符 但我是利用plsql导入csv格式数据时 xff0c 报错ora 00972 xff0c 表是之前建好的 x
  • Ubuntu切换内地源

    编辑 etc apt sources list删除里面的所有内容添加以下内容到sources中保存即可 阿里云源 deb http mirrors aliyun com ubuntu focal main restricted univer
  • oracle 用exp导出表

    用于导出oracle数据库表空间的表 xff0c 有以下几种情况 一般导出 xff1a exp username password 64 ip地址 实例 file 61 路径及文件名 导出表空间指定的表 exp username passw
  • 动态获取API的地址

    原理 xff1a 现在虽然大部分Win32程序都使用ExitProcess函数来终止执行 xff0c 但是其实用ret指令也是可以的 我们的应用程序的主程序可以被看成是一个被Windows调用的子程序 当父进程要创建一个子进程时 xff0c
  • 使用go做后端,用户密码采取bcrpyt哈希加密

    bcrypt哈希由多个部分组成 这些部分用于确定创建哈希的设置 xff0c 从而可以在不需要任何其他信息的情况下对其进行验证 相较于MD5 xff0c SHA 256等哈希算法更适合用于做密码的哈希 xff0c 原因在于bcrypt算法哈希