Bcrypt算法学习的一些总结

Bcrypt算法理解## 标题

一、介绍:
bcrypt是一个跨平台的文件加密工具,由它加密的文件可在所有支持的操作系统和处理器上转移。在目前,很难以破解该算法,因为需要花费大量的时间,以年为单位。

二、基本原理:
1、随机盐+明文密码 —经过多次hash算法—生成密文密码
密文密码 — 无法通过计算还原出原始密码(×) — 明文密码
2、如图2.1所示:
Bcrypt算法学习的一些总结_第1张图片

								图 2.1 bcrypt流程图

注:bcrypt算法是单向Hash加密算法,不可逆向破解。

3、bcrypt有四个主要变量:
(1)、saltRounds(工作因子):正整数,跟hash算法散列计算次数有关,数值越高越安全,默认10次。
注:工作因子,是作为hash算法计算次数的一个关键参数,公式为:
Hash次数 = 1 * (2^(工作因子))
(2)、passwd:明文密码字符串。
(3)、salt:“盐”,固定字符 2 a ( 版 本 号 ) + 2a(版本号) + 2a()+saltRounds+$由随机数匹配的字符。如图2.2(红线圈起来的)所示:
在这里插入图片描述
图 2.2 salt格式

(4)、myHash:把passwd和salt进行多次hash算法(次数一般为2^10),形成我们要的myHash。

注:第一步产生盐(salt):输入saltRounds,passwd,打开/dev/urandom设备产生随机数;固定的字符 (这个2a前后分别有个美元符号) 2 a 2a 2a+$saltRouds… 作为盐的前部分,后面部分由产生的随机数匹配对应字符;将两部分整合在一起形成盐。

第二步生成myHash:输入上面整合盐(salt),以及passwd,通过hash算法散列,hash的次数由saltRounds确定,多次hash算法后生成muHash字符串。

第三步整合:将盐(salt)和myHash组合在一起就是最终的密文密码。

bcrypt密文密码如图2.3所示:
在这里插入图片描述

                               图 2.3 bcrypt 密文密码图

salt包含:(有一个美元符号)$2a(有一个美元符号) 10 ( 有 一 个 美 元 符 号 ) 10(有一个美元符号) 10()+后面的22个字符。
myhash包含:除了salt的部分。

三、耗时及测试
1、bcrypt算法加密的过程,最耗时的部分就是hash算法多次计算所消耗的时间,这个次数如上面公式所写,跟你输入的工作因子数值有关,数值越大——计算次数会以2的次方增加。对于工作因子的值,范围在4~31之间。
例:工作因子 = 10;次数 = 2^10
工作因子 = 31;次数 = 2^31

2、测试:

你可能感兴趣的:(Bcrypt算法学习的一些总结)