浅谈消息摘要算法

目录

消息摘要算法的使用场景:

消息摘要算法的典型特征:

常见的摘要算法有:

算法不可逆的原理

如何保障密码安全


消息摘要算法的使用场景:

 

消息摘要算法的典型特征:

-消息相同,则摘要相同

-无论消息长度为多少,摘要的长度是固定的(同一种算法)

-消息不同,则摘要几乎不会相同

常见的摘要算法有:

-MD系列: MD2(128bit),MD4(128bits),MD5(128bit)

-SHA家族:SHA-1(160bit),SHA-256(256bit),SHA-384(bit),SHA-512(512bit)

1bit,即为1位2进制,其可能结果为-0,1(2种结果,即为2的1一次方)

2bit,即为2位2进制,其可能结果位-00,01,10,11(4种结果,即为2的二次方)

3bit,即为3位2进制,其可能结果位-000,001,010,011,100,101,110,111(8种结果,即为2的三次方)

...

以MD5为例,其运算结果是由128个二进制组成的,所以MD5算法的运算结果的种类有2的128次方种,通常会转换成16进制数来表示,则是32位长度的16进制数

算法不可逆的原理

由于消息算法在运算过程种会丢失一部分数据,所以,消息算法都是不可逆的,即不能通过密文来破解明文

如何保障密码安全

为什么会出现安全问题?

在网络上,有一些平台记录了简单的明文密文的对应关系的数据库,以实现"根据密文查询出原文"的效果,但是前面我们说到了以MD5为例,能产生的运算结果种类有2的128次方种,所以,这些平台不能穷举所有的对应关系,只能记录很小一部分(简单明文),因此,只要原文足够复杂,在这些平台几乎是查询不到的

以该平台为例,该平台记录90万亿条,什么概念?如果我们的密码由数字和字母组成,那一位密码的结果种类有26*2+10,即62种,只要8位,其结果种类就能轻松达到90万亿这个数字,如果加上字符,其产生的结果将更加庞大,所以不能穷举所有的对应关系,只能记录很小一部分(简单明文)

 如何保证原文的复杂性:(可综合使用以下3种)

-要求用户使用强度更高的原始密码

 -要求使用较长的密码

 -要求密码中包含的字符种类更多样化

-加盐(salt):即在用户输入的密码中再加入字符串

     - 理论上,盐值越复杂越好,但是,也没有必要过度复杂

     - 盐值的具体使用也没有规定,原则上,只要能被运算数据变复杂即可

 - 循环加密

     - 将第一次运算得到的密文,作为原文,进行第2次运算,如此循环多次

- 使用长度更长的消息摘要算法

public class DigestTest{
        
    public static void main(String[] args) {

        String rawPassword = "Java_1956";    //明文

        String salt = "helloword";    //盐值

        String encodedPassword = DigestUtils    //密文
                .md5DigestAsHex((salt + rawPassword + salt).getBytes());

        for(int i=0;i<5;i++){    //将密文循环加密
            
            encodedPassword = DigestUtils
               .md5DigestAsHex(encodedPassword.getBytes());

        }
        
        System.println.out("原始密码="+rawPassword+",MD5运算结果="+encodedPassword)

        //输出结果为:原始密码=Java_1956,MD5运算结果=b440d2c2bafe262b0006ed0eec8a0544

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值