Java中使用MD5与Base64进行加密 您所在的位置:网站首页 128位编码 Java中使用MD5与Base64进行加密

Java中使用MD5与Base64进行加密

2023-12-09 02:23| 来源: 网络整理| 查看: 265

MD5

什么是MD5:MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。(注意MD5只能加密不能解密!)

Base64

Base64是一种能将任意二进制数据用64种字元组合成字串的方法,而这个二进制数据和字串数据彼此之间是可以互相转换的,十分方便。在实际应用上,Base64除了能将二进制数据可视化之外,也常用来表示字串加密过后的内容。 Base 64主要用途不是加密,而是把一些二进制数转成普通字符,方便在网络上传输。 由于一些二进制字符在传输协议中属于控制字符,不能直接传送,所以需要转换一下才可以。由于某些系统中只能使用ASCII字符,Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法,Base64特别适合在http,mime协议下快速传输数据。比如网络中图片的传输。Base64,并非安全领域下的加密解密算法。虽然经常遇到所谓的base64的加密解密。但base64只能算是一个编码算法,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是方式初级又简单。 (base64可以进行编码也可以进行解码)

简单使用

通常我们在保存用户密码这类信息时,需要使用密文存储,下面我们就简单实现一下使用MD5和base64进行加密。 MD5可以使用Java自带的MessageDigest,也可以使用Spring自带的工具类DigestUtils。

package com.openlab.test; import org.springframework.util.DigestUtils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.Base64; public class SecurityTest { public static void main(String[] args) throws NoSuchAlgorithmException { /** * MD5可以使用Java自带的MessageDigest, * 也可以使用Spring自带的工具类DigestUtils */ //假设为用户输入的密码 String inputPassword = "admin12345"; //1.Java自带的MessageDigest //获取后的摘要二进制数据 MessageDigest md5 = MessageDigest.getInstance("MD5"); byte[] digest = md5.digest(inputPassword.getBytes()); System.out.println("Java自带的工具类内容为"+ Arrays.toString(digest)); //2.spring自带的工具类 //获取后的摘要二进制数据 byte[] bytes = DigestUtils.md5Digest(inputPassword.getBytes()); System.out.println("spring工具类获取内容为:"+Arrays.toString(bytes)); //直接通过二进制数组创建字符串看看效果 String s = new String(digest); System.out.println("直接通过摘要数据创建的字符串:"+s); //结果为t��1��NW��?���]所以这里使用base64进行编码 //获取编码器 Base64.Encoder encoder = Base64.getEncoder(); //获取编码的摘要二进制数据 byte[] encode = encoder.encode(digest); System.out.println("使用base64编码后的二进制数据"+Arrays.toString(encode)); //通过编码后的二进制数据构建字符串 String s1 = new String(encode); System.out.println("编码后的二进制数据构建的字符串:"+s1); //最后的==是固定格式 } }

测试结果

Java自带的工具类内容为[116, -120, -29, 49, -72, -74, 78, 87, -108, -38, 63, -92, -21, 16, -83, 93] spring工具类获取内容为:[116, -120, -29, 49, -72, -74, 78, 87, -108, -38, 63, -92, -21, 16, -83, 93] 直接通过摘要数据创建的字符串:t��1��NW��?���] 使用base64编码后的二进制数据[100, 73, 106, 106, 77, 98, 105, 50, 84, 108, 101, 85, 50, 106, 43, 107, 54, 120, 67, 116, 88, 81, 61, 61] 编码后的二进制数据构建的字符串:dIjjMbi2TleU2j+k6xCtXQ== Process finished with exit code 0

因此我们就将原密码 “admin12345” 加密成了 “dIjjMbi2TleU2j+k6xCtXQ==”, 最后的 “==” 是固定格式,保存的时候将他截取调即可,因此当我们从前端获取到用户数据时,可以通过MD5工具类对密码进行加密然后保存到数据库,实现密文保存密码的功能。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有