MD5 加密算法详细介绍

2023-10-27

MD5是什么

message-digest algorithm 5(信息-摘要算法)。经常说的“MD5加密”,就是它→信息-摘要算法。

在下载一下东西时,经常在一些压缩包属性里,看到md5值。而且这个下载页面,很可能会在某一个地方,写了一句,此文件的MD5值为XXXXXXXXX。这有什么作用呢?

白话白话:md5,其实就是一中算法。可以将一个字符串,或文件,或压缩包,执行md5后,就可以生成一个固定长度为128bit的串。这个串,基本上是唯一的。

所以,有人修过压缩包后,就会生成新的串,这时就可以拿网站提供的串和新生成的串对比,如果不同,那就是被人修过过了。

 

加密和摘要,是不一样的

加密后的消息是完整的;具有解密算法,得到原始数据;

摘要得到的消息是不完整的;通过摘要的数据,不能得到原始数据;

所以,当看到很多人说,md5,加密,解密的时候,呵呵一笑就好了。

QQ截图20150311162809

 

MD5长度

有人说md5,128位,32位,16位,到底md5多长?

md5的长度,默认为128bit,也就是128个0和1的二进制串。

这样表达是很不友好的。

所以将二进制转成了16进制,每4个bit表示一个16进制,

所以128/4 = 32 换成16进制表示后,为32位了。

QQ截图20150305111855

 

为什么网上还有md5是16位的呢?

网上有很多帖子,md5 32位 16位 加密 区别。

仔细观察admin生成的32位和16位的md5值……

查询结果:

md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3

md5(admin,16) = 7a57a5a743894a0e

看出来了吧!

其实16位的长度,是从32位md5值来的。是将32位md5去掉前八位,去掉后八位得到的。

 

MD5的作用

①一致性检验,最上面那个例子

②数字签名,还是最上面那个例子。只是把md5看出了一个指纹,按了个手印说明独一无二了。

③安全访问认证,这个就是平时系统设计的问题了。

在用户注册时,会将密码进行md5加密,存到数据库中。这样可以防止那些可以看到数据库数据的人,恶意操作了。

 

md5不能破解吗?

md5是不可逆的,也就是没有对应的算法,从生产的md5值逆向得到原始数据。

但是如果使用暴力破解,那就另说了。

 

md5是唯一的吗?

md5作为数据库中的主键可行吗?这就涉及到一个问题,md5值是唯一的吗?答案是,不唯一。

也就是一个原始数据,只对应一个md5值;

但是一个md5值,可能对应多个原始数据。

 

java中生成MD5的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public class  MD5Test {
 
     //main测试类
     public static  void main(String[] args) {
         String result = getMD5( "aaa" );
         System.err.println(result);
     }
 
     /**
      * 生成md5
      * @param message
      * @return
      */
     public static  String getMD5(String message) {
         String md5str =  "" ;
         try {
             //1 创建一个提供信息摘要算法的对象,初始化为md5算法对象
             MessageDigest md = MessageDigest.getInstance( "MD5" );
 
             //2 将消息变成byte数组
             byte[] input = message.getBytes();
 
             //3 计算后获得字节数组,这就是那128位了
             byte[] buff = md.digest(input);
 
             //4 把数组每一字节(一个字节占八位)换成16进制连成md5字符串
             md5str = bytesToHex(buff);
 
         catch (Exception e) {
             e.printStackTrace();
         }
         return md5str;
     }
 
     /**
      * 二进制转十六进制
      * @param bytes
      * @return
      */
     public static  String bytesToHex(byte[] bytes) {
         StringBuffer md5str =  new StringBuffer();
         //把数组每一字节换成16进制连成md5字符串
         int digital;
         for (int i = 0; i < bytes.length; i++) {
              digital = bytes[i];
 
             if (digital < 0) {
                 digital += 256;
             }
             if (digital < 16){
                 md5str.append( "0" );
             }
             md5str.append(Integer.toHexString(digital));
         }
         return md5str.toString().toUpperCase();
     }
}

 

转自:http://www.weixuehao.com/archives/474

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MD5 加密算法详细介绍 的相关文章

随机推荐

  • js实现颜色选择器

    前言 纯js就可以实现颜色选择器 不用安装很多的插件 和配置 也不必要有jquery才能使用 只是js文件就可以了 目录 实现原理 如果要获取当前的颜色 可以获取结论的背景 或者再返回的函数里面直接写赋值 实现步骤 1 引入封装js文件 c
  • CheckStyle报错的常见问题及解决方式

    CheckStyle报错的常见问题及解决方式 声明 本文摘自百度文库 希望这篇文章提到的规范能对大家编程起到好的效果 此文不定期更新 将推出更加详尽的编程规范 1 提示 Type is missing a javadoc commentCl
  • vue v-model.number 和 type=“number“详解

    1 v model number详解 当两个input都输入非数字时 v model number和v model的值都不会转为Number类型 当两个input都输入数字时 v model number的值会转为Number类型 v mo
  • 1.Ajax基础——XMLHttpRequest、Get/Post、封装Ajax

    1 XMLHttpRequest Ajax技术核心是XMLHttpRequest对象 简称XHR 背景 在XHR出现之前 Ajax式通信必须借助hack手段来实现 大多数是使用隐藏的框架和内嵌的框架
  • 【Linux系统之虚拟化实战】PVE下KVM虚拟机的嵌套安装方法

    Linux系统之虚拟化实战 PVE下KVM虚拟机的嵌套安装方法 一 检查本地系统环境 1 环境规划 2 检查PVE宿主机系统版本 3 检查PVE虚拟机系统版本 二 开启PVE宿主机虚拟化 1 检查PVE主机嵌套虚拟化是否开启 2 PVE主机
  • vue 将public文件下的图片引入.vue文件内

    data return publicPath process env BASE URL div 11 div
  • vue实现打印功能

    vue实现打印功能 安装npm i vue print nb 在main js中引入并注册 打印 import Print from plugins print 注册 Vue use Print 3 公共的js方法 我写在plugins里面
  • python输出100以内的素数

    可以使用以下代码来输出100以内的素数 for num in range 2 101 for i in range 2 num if num i 0 break else print num 这段代码使用了一个双重循环 外层循环遍历从2到1
  • 数字信号处理 --- 周期信号的三角函数表示 一(三角函数的性质和三角波的合成)

    三角函数的性质 一系列三角函数谐波 harmonic sinusoids 是傅里叶分析的基石 我们可以用这些不同频率的谐波构建各种各样的信号 波形 谐波 harmonics 现在我们选择一个频率为f0的任意频率 arbitrary freq
  • 杂谈:更新PowerShell 7.0.0后如何激活Anaconda环境?

    Preface 日前微软更新Powershell Core的版本至7 0 0 带来了很多新的特性 也带来了很多不同之处 例如启用了新的安装位置 去掉了Core的名称以及启用了新的可执行文件名称 将powershell exe修改为pwsh
  • 网络模型——OSI模型与TCP/IP模型

    文章目录 一 OSI七层模型 二 TCP IP协议 五层体系 三 OSI 参考模型与 TCP IP 参考模型的区别 四 TCP IP 五层协议的通信方式 OSI模型与TCP IP模型 对比如下 一 OSI七层模型 各层功能 应用层 应用层位
  • nginx(三十六)健康检查

    一 ngx http upstream module 官方自带 server 1 该指令用于 指定后端服务器 的名称和 optional 参数 2 服务器的名称可以是一个 域名 一个 ip地址 端口号或 unix socket upstre
  • 中间表示- 三地址码

    使用三地址码的编译器结构 三地址码的基本思想 1 给每个中间变量和计算结果命名 没有复合表达式 2 只有最基本的控制流 没有各种控制结构 if do while for等等 只有goto call等 3 所以三地址码可以看成是抽象的指令集
  • Java(七) 句柄

    在学习什么是句柄之前我们先学习虚拟机的对对象的访问方式 一 句柄访问方式 使用句柄访问对象 会在堆中开辟一块内存作为句柄池 句柄中储存了对象实例数据 属性值结构体 的内存地址 访问类型数据的内存地址 类信息 方法类型信息 对象实例数据一般也
  • 学习人工智能技术法则

    在当前的教育体系下 人工智能领域的人才培养依然以研究生教育为主 随着近些年来人工智能领域人才缺口的增大 格物斯坦表示目前已经一小部分高校开始陆续在本科阶段开设人工智能专业 相信随着人工智能领域的发展 未来更多专业的学生将有机会接触到人工智能
  • GRE、PPTP、L2TP隧道协议

    在IPSec 和Multiprotocol Label Switching MPLS VPN出现前 GRE被用来提供Internet上的VPN功能 GRE将用户数据包封装到携带数据包中 因为支持多种协议 多播 点到点或点到多点协议 如今 G
  • 数学建模-Topsis综合评价(评价模型)

    Topsis算法核心思想是逼近理想解的排序方法 正理想解 各指标都达到各候选方案的最好值 负理想解 各指标都达到各候选方案的最差值 基于有限个评价对象与理想化目标的接近程度进行排序 在现有的对象中进行相对优劣的评价 算法步骤 1 构造决策矩
  • arm-linux 应用层调用驱动函数

    需要调用头文件 include stdio h include unistd h unistd h 是 C 和 C 程序设计语言中提供对 POSIX 操作系统 API 的访问功能的头文件的名称 该头文件由 POSIX 1 标准 单一UNIX
  • 机考[41-50]

    华为机考 041 求解连续数列 042 求字符串中所有整数的最小和 043 求最多可以派出多少支团队 044 删除字符串中字符最少字符 045 数据分类 046 数列描述 047 数字涂色 048 数组二叉树 049 数组拼接 050 数组
  • MD5 加密算法详细介绍

    MD5是什么 message digest algorithm 5 信息 摘要算法 经常说的 MD5加密 就是它 信息 摘要算法 在下载一下东西时 经常在一些压缩包属性里 看到md5值 而且这个下载页面 很可能会在某一个地方 写了一句 此文