当前位置:   article > 正文

【哈希加密算法】MD5和SHA-1基本介绍和使用!_哈希密码转换

哈希密码转换

一、哈希算法

 哈希算法,根据碰撞概率,输出的长度越长,就越难产生碰撞,也就越安全。

常用的哈希算法如下: 

(1)哈希算法的用途

  1. 数据加密:哈希算法可以将原始数据转换成不可逆的加密字符串,这个字符串被称为哈希值。哈希值可以用于保护数据的隐私,因为无法通过哈希值推导出原始数据。

  2. 密码存储:哈希算法可以用于保护密码的存储。通过将密码转换为哈希值并存储哈希值,可以防止攻击者获取用户密码。当用户登录时,输入的密码将与保存的哈希值进行比对,如果匹配则允许用户登录。

  3. 校验文件的下载。

总之,哈希算法在数据安全、数字证书、数字签名等领域都有广泛的应用。

一、MD5

MD5是一种计算机算法,用于将任意长度的数据(消息)压缩成一个128位(16字节)的哈希值。MD5算法常用于数据完整性校验、数字签名、密码存储等领域。

MD5算法具有以下特点:

  1. 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
  2. 唯一性:不同的输入数据会产生不同的输出。
  3. 不可逆性:无法通过MD5值反推出原始数据。
  4. 抗修改性:对数据进行微小的修改,MD5值的变化也会很大。

(1)对字符串进行编码

  1. public class Demo01 {
  2. public static void main(String[] args) throws NoSuchAlgorithmException {
  3. //创建基于MD5算法的消息摘要对象
  4. MessageDigest md5=MessageDigest.getInstance("MD5");
  5. //更新原始数据
  6. md5.update("博得明月出,用兰花换锦服".getBytes());
  7. //获取加密后的结果
  8. byte[] digestBytes=md5.digest();
  9. System.out.println("加密后的结果(字节数组):"+Arrays.toString(digestBytes));
  10. System.out.println("加密后的结果(16进制字符串):"+HashTools.bytesToHex(digestBytes));
  11. System.out.println("加密结果的长度:"+digestBytes.length);
  12. }
  13. }

 加密后的结果(字节数组):[-78, 36, -54, 29, 82, 49, -85, -24, 87, -39, 102, 14, -4, 73, -83, -32]
加密后的结果(16进制字符串):b224ca1d5231abe857d9660efc49ade0
加密结果的长度:16

(2)对图片进行加密 

  1. //按照MD5算法对图片进行加密
  2. public class Demo03 {
  3. public static void main(String[] args) throws IOException, NoSuchAlgorithmException {
  4. //图片的原始字节内容
  5. byte[] imageBuf=Files.readAllBytes(Paths.get("D:\\test\\20230521\\mao1.jpg"));
  6. //创建基于算法的消息摘要对象
  7. MessageDigest md5=MessageDigest.getInstance("MD5");
  8. //原始字节内容
  9. md5.update(imageBuf);
  10. //获取加密摘要
  11. byte[] digestBytes=md5.digest();
  12. System.out.println("加密后的结果(字节数组):"+Arrays.toString(digestBytes));
  13. System.out.println("加密后的结果(16进制字符串):"+HashTools.bytesToHex(digestBytes));
  14. System.out.println("加密结果的长度:"+digestBytes.length); //MD5算法的固定输出长度为16个字节
  15. }
  16. }

加密后的结果(字节数组):[-90, 35, 17, 98, 5, 9, -60, 116, -53, -119, -32, -68, 43, -65, 66, 105]
加密后的结果(16进制字符串):a62311620509c474cb89e0bc2bbf4269
加密结果的长度:16

三、SHA-1

SHA-1是一种加密算法,全称为Secure Hash Algorithm 1。它旨在产生一个160位(20字节)的消息摘要,以提供数据的完整性保护。

  1. public class Demo04 {
  2. public static void main(String[] args) throws NoSuchAlgorithmException {
  3. //原始密码
  4. String password="xdsqczkyqs";
  5. //产生随机的盐值
  6. String salt=UUID.randomUUID().toString().substring(0,4);
  7. //创建基于SHA-1算法的消息摘要对象
  8. MessageDigest sha1=MessageDigest.getInstance("SHA-1");
  9. sha1.update(password.getBytes());
  10. sha1.update(salt.getBytes());
  11. //计算加密结果SHA-1的输出结果为20个字节(40)
  12. String digestHex=HashTools.bytesToHex(sha1.digest());
  13. System.out.println("加密结果:"+digestHex);
  14. }
  15. }

 加密结果:d98902bdfdf050316c28487caf5b358377a4cb23

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/515535
推荐阅读
相关标签
  

闽ICP备14008679号