前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MD5加密算法

MD5加密算法

作者头像
taoli
发布2022-09-30 10:37:54
1K0
发布2022-09-30 10:37:54
举报
文章被收录于专栏:桃李博客桃李博客

MD5属不属于加密算法,因为只可以加密,无法获得密码原文,只能属于算法。

常见的加密算法

常用加密算法可以分为单向加密和双向加密。

  • 单向加密:只提供单向加密不能解密,不可逆的过程。通常用来存储用户名和密码,直接从前端传输来存储到数据库中
  • 双向加密:又分为对称性加密算法和非对称性加密算法。对称性加密算法,发送和接收端双方都知道秘钥和加密算法且秘钥都是相同的,之后便是对数据的加密和解密过程。非对称加密算法 :发送之前A B事先生成一对秘钥,A将秘钥发送给B,B将秘钥发送给 A,A先用B的秘钥加密密文在发送B,B解密,同理。

1.什么是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 公开密钥认证或是 数字签名 等用途。

2.MD5加密的功能

输入任意长度的信息,经过处理,输出都是128位的信息值

不同的输入对应的输出一定不同,保证唯一性

3.MD5加密的优点和缺点

优点:

  • 防止被篡改,在传输过程中一旦被串改,那么计算出的MD5值一定不同。
  • 计算速度快。加密速度快,不需要秘钥。
  • 检查文件的完整性,一旦文件被更改,MD5值也是不同的。
  • 防止看到明文,公司存放密码存放的是MD5值。
  • 防止抵赖,用于数字签名,一旦用户的文件被第三方MD5加密,若以后A说这个文件不是他写的,那么当用文件MD5后获得的签名一致,可以确认。

缺点:

  • 作为一种散列算法,虽然很难发生散列碰撞,但是经过证实,仍然存在两种不同数据会发生碰撞。
  • MD5的安全性:将用户的密码直接MD5后存储在数据库是不安全的。第一,用户普遍习惯用容易记忆的密码,生日,手机号等,黑客容易破译此类密码。这也是加盐值的一个原因。第二,直接MD5存入数据库,若数据库被破解,通过MD5反查会查到密码,需要随机盐值的配合。
  • 考虑到多数人所使用的密码为常见的组合,攻击者可以将所有密码的常见组合进行单向哈希,得到一个摘要组合,然后与数据库中的摘要进行比对即可获得对应的密码。这个摘要组合也被称为rainbow table。

4.MD5的实现原理:

  • 填充:将输入信息进行512求余分组,若不等于448,那么进行填充 1 和0,一个1 N个0。最后的数据就为N*512+448
  • 记录信息长度:将得到的信息用64位存储填充之前的信息长度,这样448+64=512,总信息为N+1个512
  • 以四个常数ABCD与每组512位进行函数运算,最后输出的结果就是4组32位的常数。拼接得到MD5码

5.MD5加密 代码实现:

代码语言:javascript
复制
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException;
 /**
  * MD5加密 
  */ 
public class MD5Utils { 
public static String code(String str){ 
try { 
MessageDigest messageDigest = MessageDigest.getInstance("MD5"); messageDigest.update(str.getBytes()); 
byte[]byteDigest = messageDigest.digest(); 
int i;
StringBuffer buffer = new StringBuffer("");
 for (int offset = 0; offset<byteDigest.length;offset++){
 i = byteDigest[offset]; 
if(i<0){
 i+=256;
} 
if(i<16){
 buffer.append("0");
} 
buffer.append(Integer.toHexString(i)); 
} 
//32位加密 
return buffer.toString(); 
//16位加密
} catch (NoSuchAlgorithmException e) { 
e.printStackTrace();
 return null; 
    } 
  } 
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常见的加密算法
  • 1.什么是MD5加密(单向加密)
  • 2.MD5加密的功能
  • 3.MD5加密的优点和缺点
  • 4.MD5的实现原理:
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档