浅谈discuz密码加密的章程

discuz注册时,会把密码按三个条条框框加密。

大范围攻击形式:
字典攻击:开始时期base64+md5

诸如本身的密码是123456

破解格局–把普及密码进行base63+md5加密 通过重复登录服务器
也许拖库举办相配破解【破解格局属于开放情状】

复制代码 代码如下:

对称加密

加密解密效率高、速度快、空间占用小、加密强度高
缺点是 参与多方都需要持有密钥、一旦有一个人泄露则安全性遭到破坏、另外再不容安全通道下分发密钥也是个问题

    代表算法:DES、3DES、AES、IDEA等等
    DES:其密钥长度为56位+8位校验  破解方式:暴力破解
    3DES:3重DES操作 算法不能靠累积增加防御力
    AES:分组算法、分组长度为128、192、256位三种、其优势在于 速度快 整个过程可以数学化描述、目前尚未有效破解手段


    适用于大量数据加解密、不能用于签名场景 需要提前分法密钥

echo md5(“123456”); 

非对称加密

    即公钥+私钥 公钥是公开的、私钥是个人持有的

    代表算法:RSA、EIGamal、椭圆算法 ECC
    RSA:经典的公钥算法 安全性未知
    EIGamal:利用了模运算下求离散对数困难的特性
    椭圆曲线算法:现代备受关注的算法系列,基于对椭圆曲线上特定点进行特殊乘法逆运算难以计算的特性。

RSA 算法等已被认为不够安全,一般推荐采用椭圆曲线系列算法。

会输出:

掺杂加密机制

先用计算复杂度高的非对称加密协商一个临时的对称加密密钥(会话密钥,一般相对内容来说要短得多),然后对方在通过对称加密对传递的大量数据进行加解密处理。

典型应用:现在大家常用的HTTPS机制、
    HTTPS实际上是利用了Transport Layer Security/Secure Socket Layer(TLS/SSL)来实现可靠性传输、TLS为SSL升级版本
    目前广泛应用的为  TLS1.0  对应到SSL3.1 版本

创建安全连接的具体步骤如下:

    客户端浏览器发送信息到服务器,包括随机数 R1,支持的加密算法类型、协议版本、压缩算法等。注意该过程为明文。
    服务端返回信息,包括随机数 R2、选定加密算法类型、协议版本,以及服务器证书。注意该过程为明文。
    浏览器检查带有该网站公钥的证书。该证书需要由第三方 CA 来签发,浏览器和操作系统会预置权威 CA 的根证书。如果证书被篡改作假(中间人攻击),很容易通过 CA 的证书验证出来。
    如果证书没问题,则用证书中公钥加密随机数 R3,发送给服务器。此时,只有客户端和服务器都拥有 R1、R2 和 R3 信息,基于 R1、R2 和 R3,生成对称的会话密钥(如 AES算法)。后续通信都通过对称加密进行保护。

复制代码 代码如下:

最简便易行的哈希加密

例如SHA256,SHA512,RipeMD和WHIRLPOOL。

hash(“hello”) =
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

破解情势:字典攻击 、暴力攻击
加密算法公开
将普及密码哈希之后与对象张开比对
强力攻击尝试每三个在给定长度下种种字符的组合
霓虹表枚举哈希值-来更飞快的破解密码

加盐格局

加盐需要注意两点:短盐值、盐值重复

两大弊端:盐值重复或者硬编到软件中、可以通过破解软件、专门为这个软件生成彩虹表和查询表
盐值太短:就相当于降低密码复杂度、这使得破解字典体积更小、跑字典破解更快

e10adc3949ba59abbe56e057f20f883e

结合哈希函数

    md5(sha1(password))
    md5(md5(salt) + md5(password))
    sha1(sha1(password))
    sha1(str_rot13(password + salt))
    md5(sha1(md5(md5(password) + sha1(password)) + md5(password)))

    源码一丢、系统完蛋

盐值应该采用基于加密的伪随机数生成器
(Cryptographically Secure Pseudo-Random Number Generator –
CSPRNG)来生成
java.security.SecureRandom

仓库储存密码的手续

而数据库的值却为:

行使CSP奥迪Q5NG生成四个尺寸丰硕的盐值

将盐值混入密码,并运用正式的加密哈希函数实行加密,如SHA256
把哈希值和盐值一齐存入数据库中对应此用户的那条记下

校验密码的手续

从数据库抽取用户的密码哈希值和相应盐值
将盐值混入用户输入的密码,並且使用同样的哈希函数进行加密
比较上一步的结果和数据库累积的哈希值是或不是一样,假使一致那么密码正确,反之密码错误

    在Web程序中,永远在服务器端进行哈希加密
    让密码更难破解:慢哈希函数

PBKDF2、BCRYPT、SCRYPT曾经是最常用的三种密码Hash算法,
至于哪种算法最好,多年以来密码学家们并无定论。但可以确定的是,这三种算法都不完美,各有缺点。
其中
PBKDF2因为计算过程需要内存少所以可被GPU/ASIC加速,
BCRYPT不支持内存占用调整且容易被FPGA加速,
SCRYPT不支持单独调整内存或计算时间占用且可能被ASIC加速并有被旁路攻击的可能。

至于密码学的另一篇小说
http://www.qingruanit.net/blog/23930/note3641.html

PBKDF2算法【三种】介绍:

https://en.wikipedia.org/wiki/PBKDF2

http://blog.jobbole.com/61872/\#java

http://blog.csdn.net/u014375869/article/details/46773995

复制代码 代码如下:

7839dc9437013b5c11a5d86e9b8350e9 

注意到:

有个叫salt的字段,其值为:d82a35

实质上那是一个随意的字符串。

先是次md5后的值再加上盐值(salt)再开始展览md5,正是要博得的值了。

试一下

复制代码 代码如下:

echo md5(md5(‘123456′).’d82a35’); 

那回结果是:7839dc9437013b5c11a5d86e9b8350e9,是对的。

在php5.5以前的版本,并不曾很好的加密机制。那是个正确的秘技。已经大大地加强了密码的安全性了。

而php5.5中有更加的可信和造福的加密方法。喜欢研讨的朋友能够掌握一下:

password_hash()

http://www.php.net/manual/zh/function.password-hash.php

您恐怕感兴趣的篇章:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图