java中MD5加密

这篇具有很好参考价值的文章主要介绍了java中MD5加密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MD5加密

MD5加密是一种常见的加密方式,我们经常用在保存用户密码和关键信息上。那么它到底有什么,又什么好处呢,会被这么广泛的运用在应用开发中。

什么是MD5

MD5加密全程是Message-Digest Algoorithm 5(信息-摘要算法),它对信息进行摘要采集,再通过一定的位运算,最终获取加密后的MD5字符串。
  例如我们要加密一篇文章,那么我们会随机从每段话或者每行中获取一个字,把这些字统计出来后,再通过一定的运算获得一个固定长度的MD5加密后信息。因此,其很难被逆向破解。

MD5有哪些特点

  1. 针对不同长度待加密的数据、字符串等等,其都可以返回一个固定长度的MD5加密字符串。(通常32位的16进制字符串);
  2. 其加密过程几乎不可逆,除非维护一个庞大的Key-Value数据库来进行碰撞破解,否则几乎无法解开。
  3. 运算简便,且可实现方式多样,通过一定的处理方式也可以避免碰撞算法的破解。
  4. 对于一个固定的字符串。数字等等,MD5加密后的字符串是固定的,也就是说不管MD5加密多少次,都是同样的结果。

java中实现MD5加密方式

1. 使用JDK自带的API实现

加单实现如下

 
@Test
void test1() {
String pwd = "123456";
try {
MessageDigest md = MessageDigest.getInstance("MD5");// 生成一个MD5加密计算摘要
md.update(pwd.getBytes());// 计算md5函数
/**
* digest()最后确定返回md5 hash值,返回值为8位字符串。
* 因为md5 hash值是16位的hex值,实际上就是8位的字符
* BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
* 一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方)
*/
String hashedPwd = new BigInteger(1, md.digest()).toString(16);// 16是表示转换为16进制数
System.out.println(hashedPwd);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}

结果:

 
e10adc3949ba59abbe56e057f20f883e

2. 使用Spring的DigestUtils工具类

 
@Test
void testMD5() {
String pwd = "123456";
// 基于spring框架中的DigestUtils工具类进行密码加密
String hashedPwd1 = DigestUtils.md5DigestAsHex((pwd).getBytes());
System.out.println(hashedPwd1);
}

结果:

 
e10adc3949ba59abbe56e057f20f883e

改进- 加盐

一般加密算法固定,很容易破解,安全系数低,有很多网站可以直接破解密文。为了提高安全性,可以采取加盐的方式。生成一组随机串,保存在数据库中,然后混杂在原来的密码中,再通过加密算法加密,存进数据库中

@Test
void testMD5() {
String pwd = "123456";
String salt = UUID.randomUUID().toString();
// 基于spring框架中的DigestUtils工具类进行密码加密
String hashedPwd1 = DigestUtils.md5DigestAsHex((pwd + salt).getBytes());
System.out.println(hashedPwd1);
}

结果:

ce504625e463008803c1b875a0bd87a3

改进-加次数

多加密几次也可增加破解的难度, 一般可用于交易码等

@Test
void testMD5() {
String pwd = "123456";
String salt = UUID.randomUUID().toString();
// 基于spring框架中的DigestUtils工具类进行密码加密
String hashedPwd1 = DigestUtils.md5DigestAsHex((pwd + salt).getBytes());
hashedPwd1 = DigestUtils.md5DigestAsHex((hashedPwd1 + salt).getBytes()); // +1次
hashedPwd1 = DigestUtils.md5DigestAsHex((hashedPwd1 + salt).getBytes()); // +2次
// ... 可使用循环等
System.out.println(hashedPwd1);
}

结果:

22cca33f84e7c72132dbff6fcfc60934

3. 使用Shiro的simpleHash进行加密

当然, 我们也可以加盐加次数等

如下代码

@Test
void testShiroMD5() {
String pwd = "123456"; // 密码
String salt = UUID.randomUUID().toString(); // 盐
/**
* 参数1: 加密方式
* 参数2: 要加密的字符串
* 参数3: 盐
* 参数4: 加密次数
*/
SimpleHash sh = new SimpleHash("MD5", pwd, salt, 5); // 定义simpleHash对象
String hashedPwd = sh.toHex(); // 生成16进制密文
System.out.println(hashedPwd); // 输出
}

结果文章来源地址https://www.toymoban.com/news/detail-446020.html

b37e9129e9a6c1cecc8d34c60315fd8d

到了这里,关于java中MD5加密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java中MD5加密

    MD5加密是一种常见的加密方式,我们经常用在保存用户密码和关键信息上。那么它到底有什么,又什么好处呢,会被这么广泛的运用在应用开发中。 MD5加密全程是Message-Digest Algoorithm 5(信息-摘要算法),它对信息进行摘要采集,再通过一定的位运算,最终获取加密后的MD5字

    2024年02月05日
    浏览(30)
  • Java 实现 MD5 加密算法

    1.1 MD5 算法介绍 MD5 消息摘要算法,英文:MD5 Message-Digest Algorithm ,一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。 MD5 是单向加密不可逆的,也就是常说的非对称加密,常用于用户密码的加密,这样即使密

    2024年02月09日
    浏览(46)
  • 小程序,h5,移动端处理md5加密接口,请求数据加密方式AES-128-ECB

    1.AES-128-ECB 表示使用AES(Advanced Encryption Standard)算法,密钥长度为128位,工作模式为ECB(Electronic Codebook)的一种对称加密方式。 其中: AES是一种常用的对称加密算法,被广泛地应用于各种信息安全场景中。 128表示密钥长度为128位(16字节)。AES支持的密钥长度还有192位和256位。 ECB代表电

    2024年03月28日
    浏览(39)
  • 前端常用的三种加密方式(MD5、base64、sha.js)

    作为一名优秀的前端开发工程狮,保障用户的信息安全、密码义不容辞,废话不多说,由我来介绍三种日常开发中经常用到的加密方式。 介绍: MD5中文含义为信息-摘要算法5,就是一种信息摘要加密算法,可以将数据转译为另一固定长度值 特点: 压缩性:任意长度的数据,

    2024年02月06日
    浏览(44)
  • 前端如何加密数据--五种方式(base64加密、md5加密、sha1加密、字符串方法加密、AES加密)

    1.base64加密(包括小写字母a-z、大写字母A-Z、数字0-9、符号\\\"+\\\"、\\\"/\\\"一共64个字符的字符集,另加一个“=”,实际是65个字符) 字符串转换为base64:str64 = window.btoa(str) base64转换为字符串:str=window.atob(str64) 2.md5加密 3.sha1加密   4.字符串的编码和解码(JS函数的escape()和unescape())

    2024年02月16日
    浏览(47)
  • java 使用hutool工具进行MD5加密

    引入依赖 MD5加密

    2024年02月16日
    浏览(30)
  • Java使用MD5加盐对密码进行加密处理,附注册和登录加密解密处理

    在开发的时候,有一些敏感信息是不能直接通过明白直接保存到数据库的。最经典的就是密码了。如果直接把密码以明文的形式入库,不仅会泄露用户的隐私,对系统也是极其的不厉,这样做是非常危险的。 那么我们就需要对这些铭文进行加密。 现在市场是加密的方式已经

    2024年02月02日
    浏览(31)
  • uniapp使用md5加密 js使用md5加密

    文章的初衷 最近项目中使用了md5加密,为了方便还不明白怎么使用的朋友参考查阅,当然也为了方便博主再次使用所写 md5加密说明 可在不同平台使用 因为使用方法是js方法去调用的所以不局限于某个平台 我这里使用的方式是登录的时候进行加密,具体其他的使用方式,朋友们自

    2024年02月07日
    浏览(55)
  • MD5密码加密

    密码加密        使用工具类的MD5功能方法,加密密码        注册环节:               1. 获取用户输入密码 123456               2. 调用MD5加密密码,保存新的加密密码到数据库        登录环节:               1. 获取用户输入密码 123456        

    2024年02月16日
    浏览(33)
  • 浅谈Md5+Salt加密

    一 为什么需要加密? 比如当前有个用户进行注册,他输入的账号密码是“ltl”和\\\"123456\\\",那么我们肯定要将账号密码保存到数据库中。在没有接触过“加密”这个概念时,我们肯定是将账号密码以明文的方式保存到user表中。那么明文存放密码会有哪些问题呢? 如果有人能看

    2024年02月04日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包