栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

两种常用的哈希算法与Hmac算法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

两种常用的哈希算法与Hmac算法

目录

0.概述:

1、MD5算法

1.1 步骤

1.2代码实现

2 、SHA-1算法

2.1 步骤

2.2 代码实现:

3 、Hmac算法

3.1 步骤:

3.2 代码实现:


0.概述:

哈希算法又称摘要算法,它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。哈希算法的目的:为了验证原始数据是否被篡改。

最主要的特点是:

  • 相同的输入一定得到相同的输出

  • 不同的输入大概率得到不同的输出

1、MD5算法

1.1 步骤
  • 获取基于MD5加密算法的工具对象

  • 更新原始数据

  • 获取加密后的结果

  • 将字节数组形式的结果转换成字符串

1.2代码实现
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
​

public class Test02 {
    public static void main(String[] args) {
        String password = "wbjxxmynhmyzgq";
        try {
            MessageDigest digest = MessageDigest.getInstance("MD5");
            digest.update(password.getBytes());
            byte[] digestByteArray = digest.digest();//加密
            StringBuilder result = new StringBuilder();
            for(byte b : digestByteArray) {
                result.append(String.format("%02x", b));
            }
            System.out.println(result.toString());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}
​

2 、SHA-1算法

2.1 步骤
  • 获取基于MD5加密算法的工具对象(“SHA-1”)

  • 更新原始数据

  • 获取加密后的结果

  • 将字节数组形式的结果转换成字符串

2.2 代码实现:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.UUID;

public class Test01 {
    public static void main(String[] args) {
        String password = "sdfsdf";
        //加盐
        String salt = UUID.randomUUID().toString().substring(0, 5);
        System.out.println(salt);
        try {
            //SHA-1哈希算法
            MessageDigest digest = MessageDigest.getInstance("SHA-1");
            digest.update(password.getBytes());
            digest.update(salt.getBytes());
            byte[] digestArray = digest.digest();
            StringBuilder resultStr = new StringBuilder();
            for(byte b : digestArray){
                resultStr.append(String.format("%02x", b));
            }
            System.out.println(resultStr.toString());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}

3 、Hmac算法

3.1 步骤:
  • 生成秘钥(创建秘钥生成器对象)

  • 利用秘钥生成器生成秘钥

  • 生成秘钥Key的字节数组

  • 可以将秘钥字节数组转换成字符串

  • 使用秘钥、进行加密(获取算法对象)

  • 初始化

  • 更新原始内容

  • 加密,生成字节数组形式的加密结果

  • 将加密结果转换成字符串

3.2 代码实现:
public class Test01 {
    public static void main(String[] args) {
        try{
        //1 获取秘钥结果
        String password = "nhmyzgq";
        //秘钥生成器
      KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5");
        //生成秘钥
        SecretKey key = keyGen.generateKey();
        //生成秘钥数组
        byte[] keyByteArray = key.getEncoded();
        StringBuilder sb = StringBuilder();
        for(byte b:keyByteArray) {
            sb.append(String.format("%02x", b));
        }
        System.out.println("打印秘钥内容:" + sb);
         //2使用秘钥,进行加密
        //获取算法对象
        Mac mac = Mac.getInstance("HmacMD5");
        //初始化
        mac.init(key);
        mac.update(password.getBytes());
        //加密(返回字节数组)
        byte[] resultByteArray = mac.doFinal();
        //把字节数组转换成字符串
        StringBuilder resultStr = new StringBuilder();
        for(byte b : resultByteArray){
            resultStr.append(String.format("%02", b));
        }
        System.out.println(resultStr);
    }catch(NoSuchAlgorithmException e){
            e.printStackTrace();
     }
    }
}
恢复秘钥的代码实现:
public class Test01 {
    public static void main(String[] args) {
        try{
        //1 获取秘钥结果
        String password = "nhmyzgq";
        //秘钥生成器
      KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5");
        //生成秘钥
        SecretKey key = keyGen.generateKey();
        //生成秘钥数组
        byte[] keyByteArray = key.getEncoded();
        StringBuilder sb = StringBuilder();
        for(byte b:keyByteArray) {
            sb.append(String.format("%02x", b));
        }
        System.out.println("打印秘钥内容:" + sb);
         //2使用秘钥,进行加密
        //获取算法对象
        Mac mac = Mac.getInstance("HmacMD5");
        //初始化
        mac.init(key);
        mac.update(password.getBytes());
        //加密(返回字节数组)
        byte[] resultByteArray = mac.doFinal();
        //把字节数组转换成字符串
        StringBuilder resultStr = new StringBuilder();
        for(byte b : resultByteArray){
            resultStr.append(String.format("%02", b));
        }
        System.out.println(resultStr);
    }catch(NoSuchAlgorithmException e){
            e.printStackTrace();
     }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019640.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号