文章目录

  • API调取
  • 精简版的JAVA代码
  • 完整代码

API调取

方法 补充说明
getMD5 获得MD5摘要
getSHA1 获得SHA1摘要
getSHA256 获得SHA256摘要
getSHA512 获得SHA512摘要
getHmacMD5 获得HmacMD5摘要
getHmacSHA1 获得HmacSHA1摘要
getHmacSHA256 获得HmacSHA256摘要
getHmacSHA512 获得HmacSHA512摘要
getPBKDF2 默认迭代54次,产生32位密钥
getRandomSalt 获得一个定长的盐

注意:

  • 不适用于SHA384等非 2 i 2^i 2i长度的方法。如有需要,请重写toHex()方法
  • 默认加盐方式为"msg"+"salt",如需自定义请重写addSalt方法
  • 精简版代码中只包含MD5相关算法,可以参照该方法填充其它数字摘要算法。参考此处:完整摘要算法工具类Java代码封装,或者此处备份地址

精简版的JAVA代码

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.security.MessageDigest;
import java.security.SecureRandom;
import java.security.spec.KeySpec;public class MDBuilder {// 散列算法public static String getMD5(String msg, String salt){return MDBuilder.buildMD(msg, "MD5", salt);}// 哈希算法public static String getHmacMD5(String msg, String key, String salt){return MDBuilder.buildHmacMD(msg, "HmacMD5", key, salt);}// 产生具体的编码private static String buildMD(String msg, String algs, String salt){String retult="";try{MessageDigest md = MessageDigest.getInstance(algs);byte[] buff = md.digest(addSalt(msg,salt).getBytes());retult  = toHex(buff);}catch (Exception e){e.printStackTrace();}return retult;}private static String buildHmacMD(String msg, String algs, String key, String salt) {String result="";try{SecretKey sk = new SecretKeySpec(key.getBytes(),algs);Mac mac = Mac.getInstance(algs);mac.init(sk);byte[] buff = mac.doFinal(addSalt(msg, salt).getBytes());result = toHex(buff);}catch (Exception e){e.printStackTrace();}return result;}// 对盐的添加方式private static String addSalt(String msg, String salt){return msg+salt;}// 迭代散列private static final int PBKDF2_ITERATIONS = 54;private static final int HASH_BIT_SIZE  = 32 * 4;/** @link https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#SecretKeyFactory */private static final String PBKDF2_ALGORITHM = "PBKDF2WithHmacSHA1";public static String getPBKDF2(String msg, String salt, int iterations){String result="";try{KeySpec spec = new PBEKeySpec(msg.toCharArray(), salt.getBytes(), iterations, HASH_BIT_SIZE);SecretKeyFactory f = SecretKeyFactory.getInstance(PBKDF2_ALGORITHM);result = toHex(f.generateSecret(spec).getEncoded());}catch (Exception e){e.printStackTrace();}return result;}//将128位的二进制序列转为32位的16进制编码private static String toHex(byte[] bytes) {StringBuilder md5str = new StringBuilder();for (byte aByte : bytes) {int temp = aByte;if (temp < 0) temp += 256; // 0x8* 在经过toHexString转化时,会被转为ffffff8*,需要+256保证其正值if (temp < 16) md5str.append("0"); // 0x05 转化会变成 5,缺少一位0md5str.append(Integer.toHexString(temp));}return md5str.toString();}// 产生一个指定种子的Strong盐public static String getRandomSalt(int length, Long seed){String salt = "default";try{SecureRandom random = SecureRandom.getInstance("SHA1PRNG");if(seed!=null)random.setSeed(seed);byte[] bytes = new byte[length / 2];random.nextBytes(bytes);//将byte数组转换为16进制的字符串salt = DatatypeConverter.printHexBinary(bytes);}catch (Exception e){e.printStackTrace();}return salt;}
}

完整代码

参考此处:完整摘要算法工具类Java代码封装

[JAVA]数字摘要算法工具类——(Hamc)MD5/SHA1/SHA256/SHA512/PBKDF2相关推荐

  1. MD5 SHA1 SHA256 SHA512 SHA1WithRSA RSA 的区别

    转自:http://www.cnblogs.com/cxygg/p/9468653.html https://blog.csdn.net/hengshujiyi/article/details/459 ...

  2. 摘要/哈希/散列算法MD5 SHA1 SHA256 SHA512的区别和MAC算法

    目录 一.摘要算法大致都要经过以下步骤 1. 明文数据预处理 1.1 填充比特 1.2 附加消息长度 2. 摘要计算 2.1 常量初始化 2.2 分组及分组拓展和分组分段 2.3 轮函数(每段一轮,此 ...

  3. python hashlib库(MD5,sha1,sha256,sha512,pbkdf2_hmac)用法及pbkdf2原理

    文章目录 1 python hashlib 库 1.1 md5 1.2 sha1 1.3 sha256 1.4 sha512 1.5 pbkdf2_hmac 2 PBKDF2 函数原理 2.1 PBK ...

  4. 整理Java相关的工具类Utils,持续更新中,建议收藏【目前更新至24】

    文章目录 1.BigDecimalUtil 2.CaptchaUtil 图片验证码工具类 3.CoordinateTransformUtil 坐标系转换工具类 4.DateUtil 日期加减工具类 5 ...

  5. java轻量级并行工具类_16 个超级实用的 Java 工具类

    原标题:16 个超级实用的 Java 工具类 源 /juejin 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名, ...

  6. Java之加密工具类java.security.MessageDigest或org.apache.commons.codec.digest.DigestUtils

    Java之加密(信息摘要)工具类(依赖:java.security.MessageDigest或org.apache.commons.codec.digest.DigestUtils) 1. java ...

  7. Java数据加密(MD5,sha1,sha256)

    数据加密,是一门历史悠久的技术,指通过 加密算法和加密 密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文.它的核心是密码学.数据加密目前仍是 计算机系统对信息进行保护的一种最可靠 ...

  8. java时间日期工具类_java日期处理工具类

    java日期处理工具类 import java.text.DecimalFormat; import java.text.ParsePosition; import java.text.SimpleD ...

  9. java自制随机数工具类

    关于Java随机数自制工具类 大家好!前面做项目邮箱验证需要验证码,所以我就自己写了一个随机数工具类,运用起来比较灵活,在这里给大家分享一下! 话不多说上代码 随机数工具类 public class ...

最新文章

  1. python 3.6
  2. VTK:Render之RenderView
  3. vue-cli创建新项目
  4. 计算机网络的网络层功能在内完成,计算机网络习题及答案
  5. springmvc jpa_使用JavaConfig的SpringMVC4 + Spring Data JPA + SpringSecurity配置
  6. 微信对账单 java_微信支付对账,你是如何处理的?
  7. Qt文档阅读笔记-qmake入门指南
  8. Leetcode883.Projection Area of 3D Shapes三维形体投影面积
  9. SpringMVC框架搭建( 使用Jar包搭建)
  10. IOS上复制粘贴号码到input有空格及input位数限制问题详解
  11. LINUX 下mysql主从安装与同步
  12. 【MySQL 面试系列】索引原理
  13. 数据分析---疫情数据可视化(地图)
  14. 如何用天干地支计算年月日时?
  15. Atom编辑器折腾记_(22)二次翻译快捷键【追加1.8新版本新增快捷键】
  16. 元胞自动机在交通系统中的应用之一【元胞自动机的基础知识】
  17. Java中如果被除数是零时的异常处理
  18. 集成微信支付后每次打开app都会跳转到微信显示正在连接
  19. GitHub地址是什么?哪里看?
  20. Android 拍照以及相册中选择(适配高版本)————上传多张照片之压缩处理、在线预览可伸缩放大(二)

热门文章

  1. 【Oracle】B-tree和函数索引
  2. idea显示console控制台
  3. Datawhale7月组队学习task1数据加载及探索性数据分析
  4. 公司挖来一个阿里Java大神,生产环境故障调优很溜
  5. 102-首发URSINA中文入门指南-打开山河社稷图
  6. 教你使用 koa2 + vite + ts + vue3 + pinia 构建前端 SSR 企业级项目
  7. 数据库_EXPLAIN(查询性能优化)
  8. 微博热搜榜爬虫2.0
  9. PHP执行Shell脚本或Bash脚本文件并返回命令输出详情
  10. 匹兹堡计算机科学公司,匹兹堡大学计算机科学专业排名第49(2020年USNEWS美国排名)...