文章目录

  • 哈希(Hash)与加密(Encrypt)的区别
  • 哈希算法
  • Java MessageDigest实现 MD5
  • 备注

哈希(Hash)与加密(Encrypt)的区别

哈希是将目标文本转换成固定长度,不可逆的消息摘要
加密是将目标文本转换成具有不同长度,可逆的密文。

选择:
需要还原成明文的选用加密,不需要的话,使用Hash。
密码可以使用哈希, 密码忘记,重置密码。

哈希算法

Hashing 哈希法、散列法。
哈希算法有很多: 常见的有 MD5、SHA1
MD5,全称Message-Digest Algorithm 5, MD5之前有MD2、MD3和MD4
SHA-1 广泛使用在TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为MD5的后继者。
SHA-2,包括SHA-224、SHA-256、SHA-384和SHA-512.
SHA-3, 曾被称为Keccak算法。
RIPEMD-160。

Java MessageDigest实现 MD5

MD5计算出128比特位,也就是长度是16的字节数组。
MD5的加密后是长度32的字符串, 长度16的字节数组要产生长度32的字符,则每个字节元素要转换位两个字符。
加密代码如下:

   public static String encrypt(String str) {String encryptStr = null;try {byte[] bytes = MessageDigest.getInstance("MD5").digest(str.getBytes()); //长度16的字节数组StringBuffer buffer = new StringBuffer(bytes.length * 2); for (int i = 0; i < bytes.length; i++) { //每个循环产生2个字符if (((int) bytes[i] & 0xff) < 0x10) buffer.append("0"); //小于16, 只有一位,则补0buffer.append(Long.toString((int) bytes[i] & 0xff, 16)); //int 32bit, 使用&, 高24位置0}encryptStr = buffer.toString();} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();}return encryptStr;}

说明:

  1. MessageDigest.getInstance(“MD5”).digest()用于加密
  2. 因为int是4个字节, 与0xff按位与的目的是高24位置为0.
  3. < 0x10 ,也就是小于10进制16的时候, 就只有一个字符, 此时补一个0。

备注

  1. byte[] bytes = MessageDigest.getInstance(“MD5”).digest(str.getBytes()); 也可以使用以下写法:
            MessageDigest md = MessageDigest.getInstance("MD5");md.update(str.getBytes());byte[] bytes = md.digest();

Long.toString((int) bytes[i] & 0xff, 16)
也可以使用

buffer.append(Long.toHexString((int) bytes[i] & 0xff));

或是

buffer.append(Integer.toHexString((int) bytes[i] & 0xff));

Long.toString(long i, int radix)
radix - 进制数

        int i = 1;String str = Long.toString(i,16);Assert.assertTrue(str.equals("1"));i = 20;str = Long.toString(i,16);Assert.assertTrue(str.equals("14"));//1*16+4 = 20i=200;str = Long.toString(i,16);Assert.assertTrue(str.equals("c8"));//12*16+8 = 20

实例代码:
https://github.com/osxm/jcodef/blob/master/jcodef-func/src/main/java/cn/osxm/jcodef/func/bit/BitTests.java

Java之消息摘要(MD5)相关推荐

  1. Java之消息摘要之commons codec

    文章目录 前言 commons codec的导入 字符串的消息摘要 文件的消息摘要 前言 本篇关于Hash.摘要算法的前备理论参考 消息摘要(Message Digest)及其算法. JDK自带jav ...

  2. Java常用消息摘要算法-MD5

    本工具类可实现对字符串或者文件提取MD5值(MD5加密) import java.io.File; import java.io.FileInputStream; import java.io.Inp ...

  3. 消息摘要的编程使用(MD5、SHA、HMAC)

    消息摘要的概念: 唯一对应一个消息或文本的固定长度的值,由一个单向Hash加密函数对消息进行作用而产生 消息摘要的分类: (1)MD(Message Digest):消息摘要算法 (2)SHA(Sec ...

  4. MD5消息摘要算法和SHA-1安全散列算法

    MD5消息摘要算法和SHA-1 安全散列算法 MD5和SHA-1都是我们耳熟能详的术语了,很多人可能知道他们跟加密有关系,但是他们是怎么做到加密的,他们各自的特点又是什么.我来简单的讲一讲. MD5和 ...

  5. MD5中使用16进制消息摘要

    由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题. 但,二进制数太长了.比如int 类型占用4个字节,32位.比如100,用int类型的二进制数表达将是: ...

  6. 消息摘要和数字签名(Java简单实现)

    摘要: 本文主要对数字签名和消息摘要进行简要介绍,并通过java实现基本流程. 概念介绍: 消息摘要 一个消息摘要是一个数据块的数字指纹.即对一个任意长度的一个数据块进行计算,产生一个唯一指印(对于 ...

  7. java中的数据加密1 消息摘要

    消息摘要(Message Digest) 又称为数字摘要(Digital Digest).它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生.如果消息在途中 ...

  8. BASH脚本基础:使用md5命令生成消息摘要指纹

    这篇文章介绍一下MD5和md5命令的使用方法. MD5:信息摘要算法 什么是消息摘要算法 信息摘要算法MD5是Message-Digest Algorithm的缩写,它以散列函数方式对文件可以产生出一 ...

  9. HMAC加密的消息摘要码

    HMAC(Hash Message Authentication Code)哈希消息授权码,它在消息摘要算法(例如MD5,SHA系列算法)的基础上,使用密钥对消息摘要进行加密.它相当于一个马甲,内里可 ...

最新文章

  1. SAP MB1B + 313315做二步法货物移动报错-创建交货的数据不完全(客户)-
  2. 从头开始安装Ubuntu,cuda,cudnn,caffe,tensorflow,ROS
  3. 本地预览图片html和js例子
  4. 16个经典面试问题回答思路[求职者必看]
  5. np.c_与np.r_
  6. 开源在线文档编辑工具_开源暑期实习,在线教育新工具等
  7. 【Spring Cloud】网关-gateway(2.x)
  8. mysql解决编码问题
  9. linux里的tree 命令,Linux中tree命令起什么作用呢?
  10. ElasticJob‐Lite:作业监听器
  11. 正则系列2: re.search用法
  12. 07-PDI(Kettle)源码编译8.2.0.0.R版本
  13. 高输入阻抗和低输出阻抗
  14. 跨考西电计算机科学与技术专业介绍,2021年西安电子科技大学计算机科学与技术(081200)人工智能交叉研究方向_考研专业目录_考试科目_考试范围 - 学途吧...
  15. C++自制游戏《Fighter》
  16. 什么是人工智能(深度学习)
  17. 当深圳变成一座数字花园
  18. C语言学生籍贯信息记录簿
  19. php任意文件引入漏洞,PHP:ThinkCMFX任意文件包含漏洞
  20. VR下双手与物体的交互

热门文章

  1. PyQt4设置窗口左上角的小图标
  2. 正则表达式匹配 任意字符和空格的一个简便方式?
  3. web.py+xheditor+ ajaxfileupload+新浪sae图片上传
  4. GCD异步加载网络图片
  5. Linux memcache操作命令
  6. 用 Webpack 解决应用性能问题
  7. 关于PHP页面显示乱码问题的解决
  8. emctl start dbconsole失败问题的解决
  9. JPA-save()方法会将字段更新为null的解决方法
  10. 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序 解决方案