• java 加密之消息摘要算法


    简介

    消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,即单向加密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。

    消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络上使用。由于其加密计算的工作量相当巨大,所以以前的这种算法通常只用于数据量有限的情况下的加密,例如计算机的口令就是用不可逆加密算法加密的


    用途

    一般地,把对一个信息的摘要称为该消息的指纹或数字签名,数字签名是保证信息的完整性和不可否认性的方法。消息摘要算法适合作为数字签名算法,也是数字签名的核心算法。


    分类

    MD(Message Digest,消息摘要)

    SHA(Secure Hash Algorithm,安全散列算法)

    MAC(Message Authentication Code,消息认证码)

    ……


    MD

    MD算法包括MD2、MD4和MD5,摘要长度都是128位,都是单向加密,其中JDK自带MD2和MD5。

    MD5的 java 实现

    public class MyMD5 {
        public static void main(String[] args) {
            String str = "i am guo feng";
    
            try {
                //获取MD5算法实例
                MessageDigest md = MessageDigest.getInstance("MD5");
                //传入需要计算的字符串更新摘要信息
                md.update(str.getBytes());
                //获得摘要
                //BigInteger函数则将8位的字符串转换成16位hex值,
                //用字符串形式表示hash值。
                String result = new BigInteger(1, md.digest()).toString(16);
                System.out.println(result);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    输出:

    364620d83dfd1e22936d6e9792068b67
    • 1

    MD5 的应用场景

    经典的使用时序图如下:

    系统用户注册: 
    这里写图片描述

    系统用户登录: 
    这里写图片描述

    当数据库受到攻击时,泄漏的密码是MD5加密的,对用户和公司也没有什么损失。


    SHA

    安全散列算法包括SHA-1,SHA-2,其中SHA-2是SHA-224、SHA-256、SHA-384、SHA-512的统称。

    安全散列算法同MD一样,也是固定长度摘要。SHA-1的摘要长度是160,SHA-2的摘要长度是每个名称的后面标识数字。

    SHA-1的java实现:

    public class MySHA {
        public static void main(String[] args) {
            String str = "i am guo feng";
    
            try {
                //获取算法实例
                MessageDigest md = MessageDigest.getInstance("SHA");
                //传入需要计算的字符串更新摘要信息
                md.update(str.getBytes());
                //获得摘要
                //BigInteger函数则将8位的字符串转换成16位hex值,用字符串形式表示hash值。
                String result = new BigInteger(1, md.digest()).toString(16);
                System.out.println(result);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    输出:

    f23bf780967813dd28e3af23a8960821db415791
    • 1

    SHA 的应用场景

    最容易看得到的是,打开计算机浏览器的管理证书,例如我的360极速浏览器的证书,点开一个证书,可以看到指纹算法 sha1 和指纹:

    这里写图片描述

    经典的使用时序图如下:

    这里写图片描述 
    消息鉴别是指:在接收方将原始消息使用公布的摘要算法进行摘要,然后把摘要结果和接收的摘要消息进行比对,从而进行处理。

    大部分发送方以“原始消息+Key+时间戳”的类似格式进行摘要处理,然后发送。


    版权声明:本文为博主原创文章,转载请标明地址。 https://blog.csdn.net/plain_maple/article/details/57085775
  • 相关阅读:
    mybatis自学历程(二)
    mybatis自学历程(一)
    Hibernate入门教程(二):Hibernate核心API
    Hibernate入门教程(一):入门示例(Myeclipse)
    Python中反射的简单应用
    Struts2的Action访问
    Myeclipse中dtd代码提示
    B/+、索引原理
    postgres 模糊匹配
    jvm_第三章:垃圾收集与内存分配策略
  • 原文地址:https://www.cnblogs.com/yaowen/p/9133465.html
Copyright © 2020-2023  润新知