目录

1.MD5简介;

2.MD5用途;

3.MD5工具类的实现;

4.MD5加密过程;

5. MD5特征分析;


​​​​​​​

1.MD5简介;

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

密码散列函数(Cryptographic hash function),又译为加密散列函数,是散列函数的一种。它被认为是一种单向函数,也就是说极其难以由散列函数输出的结果,回推输入的数据是什么。这样的单向函数被称为“现代密码学的驮马”。这种散列函数的输入数据,通常被称为消息(message),而它的输出结果,经常被称为消息摘要(message digest)或摘要(digest)。在信息安全中,有许多重要的应用,都使用了密码散列函数来实现,例如数字签名,消息认证码。

2.MD5用途;

 MD5特点:用户传入一个明文的字符串,加密后得到一个密文!

3.MD5工具类的实现;

加盐方式:

//加盐方式public static String EncoderPwdByMd5(String pwd) throws NoSuchAlgorithmException {// 1,获取信息摘要对象md5,利用其单例函数来获取MessageDigest md5=MessageDigest.getInstance("MD5");// 2,信息摘要对象md5是对字节数组进行摘要的,所以先获取字符串的字节数组byte[] str_bytes=pwd.getBytes();// 3,信息摘要对象对得到的字节数组进行摘要,得到摘要字节数组,返回的是byte[] - 字节数组,长度是16个字节byte[] result = md5.digest(str_bytes);// 4,把摘要数组中的每一个字节转换成16进制,并拼在一起就得到了MD5值.StringBuffer sb = new StringBuffer();// 把每一个byte 做一个与运算 0xff;for (byte b : result) {// 与运算,获取字节的低8位有效值int number = b & 0xff;// 加盐// 将整数转换成16进制String str = Integer.toHexString(number);// 如果是1位的话,补0if (str.length() == 1) {sb.append("0");}// 把密文添加到缓存中sb.append(str);}// 标准的md5加密后的结果return sb.toString();}

主函数测试:

public static void main(String[] args) throws NoSuchAlgorithmException {System.out.println("加密后的密码为:\n"+EncoderPwdByMd5("123fbuinnviuiwj265"));System.out.println("md5密文的位数:\n"+EncoderPwdByMd5("123").length());}

运行结果:

普通方式:

//普通方式public static String EncoderPwdByMd5_2(String pwd) throws NoSuchAlgorithmException {char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};// 1,获取MD5摘要算法的MessageDigest对象md5,利用其单例函数来获取MD5的对象MessageDigest md5=MessageDigest.getInstance("MD5");// 2,将密码先转换成字节数,使用指定的字节更新摘要md5.update(pwd.getBytes());// 3,获得密文byte[] result = md5.digest();// 4,把密文(字节数组)转换成十六进制的字符串形式,拼在一起就得到了MD5值int j = result.length;char str[] = new char[j * 2];int k = 0;for (int i = 0; i < j; i++) {byte byte0 = result[i];str[k++] = hexDigits[byte0 >>> 4 & 0xf];str[k++] = hexDigits[byte0 & 0xf];}return new String(str);}

主函数测试:

public static void main(String[] args) throws NoSuchAlgorithmException {//System.out.println("加密后的密码为:\n"+EncoderPwdByMd5("123fbuinnviuiwj265"));//System.out.println("md5密文的位数:\n"+EncoderPwdByMd5("123").length());System.out.println("加密后的密码为:\n"+EncoderPwdByMd5_2("123"));System.out.println("md5密文的位数:\n"+EncoderPwdByMd5("123").length());}

运行结果:

4.MD5加密过程;

加密过程分为4步:

第1步:

//1,获取MD5摘要算法的MessageDigest类,利用其单例函数来获取对象md5
MessageDigest md5=MessageDigest.getInstance("MD5");

第2步:

/*2,信息摘要的方法md5.digest(),其中的参数和返回值都是byte[](字节数组)类型;所以先要获取字符串的字节数组;*/byte[] str_bytes=pwd.getBytes();

第3步:

/*3,信息摘要对象对得到的字节数组进行摘要,得到摘要字节数组,返回的是byte[] - 字节数组,长度是16个字节*/
byte[] result = md5.digest(str_bytes);

第4步:

// 4,把摘要数组中的每一个字节转换成16进制,并拼在一起就得到了MD5值
StringBuffer sb = new StringBuffer();// 把每一个byte 做一个与运算 0xff;for (byte b : result) {// 与运算,获取字节的低8位有效值int number = b & 0xff;// 将整数转换成16进制String str = Integer.toHexString(number);// 如果是1位的话,补0if (str.length() == 1) {sb.append("0");}// 把密文添加到缓存中sb.append(str);}// 标准的md5加密后的结果return sb.toString();

5. MD5特征分析;

总体概括:

用户传入一个明文的字符串(可见),加密后得到一个密文(不可见)!

得到的散列值特点: 

1,密文为128bit(16字节)的散列值,用于确保信息传输完整一致

2,长度固定,不管多长的字符串,加密后长度都是一样长;

3,不可逆,你明明知道密文和加密方式,你却无法反向计算出原密码,一般解密不了;

长度问题:

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

2,格式不太好,所以将二进制转成了16进制,每4个bit表示一个16进制,

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

byte类型转换成int类型:

首先byte是1个字节,8bit;

int是4个字节,32bit;

当把一个低精度的数据类型转成一个高精度的数据类型时,必然会涉及到如何扩展位数的问题;

补符号位扩展,若为负数,高24位全部补1,转换成十进制则会出问题。

目的就是为了保证二进制数据的一致性。

第一,oxff默认为整形,二进制位最低8位是1111  1111,前面24位都是0;

第二,&运算: 如果2个bit都是1,则得1,否则得0;

第三,byte的8位和0xff进行&运算后,最低8位中,原来为1的还是1,原来为0的还是0,而0xff其他位都是0,所以&后仍然得0,

MD5加密算法的原理相关推荐

  1. Md5加密算法的原理及应用

    MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后 ...

  2. 关于Md5加密算法的原理及应用

    MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后 ...

  3. MD5加密算法的原理和应用

    MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后 ...

  4. md5加密算法原理及其GO语言实现

    md5加密算法原理及其GO语言实现 MD5讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值 ...

  5. MD5加密算法原理及一些其他的加密算法

    Md5加密算法: 概述:md5算法也可以称为消息摘要算法,属于hash算法的一种,md5算法对输入的任意长度的消息进行运行,然后产生一个128位的消息摘要 特点: #不可逆性 唯一性:相同数据的md5 ...

  6. 了解MD5加密算法原理及其应用

    了解MD5加密算法原理及其应用 前言 一.普通强度MD5破解方法 二.Md5算法应用 (1)MD5加密原理 (2)MD5的安全性 (3)MD5加密算法的应用 三.改进后的加密方法 (1)目前MD5加密 ...

  7. MD5加密算法与SHA加密算法

    2.MD5加密 2.1 概述 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为R ...

  8. MD5加密算法(转)

    一起谈谈MD5加密算法 MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明 ...

  9. 简要分析用MD5加密算法加密信息(如有疑问,敬请留言)

    一.引言 最近看了媒体的一篇关于"网络上公开叫卖个人隐私信息"报导,不法分子通过非法手段获得的个人隐私信息,其详细.准确程度简直令人瞠口结舌.在互联网飞速发展的现在,我们不难想到, ...

  10. C语言实现MD5加密算法

    转载声明:http://blog.csdn.net/haroroda/article/details/45935099 这次我分享的是MD5加密算法.其实MD5这个大名在还没上密码学课之前我就听说过了 ...

最新文章

  1. 您详细比较三个 CSS 预处理器(框架):Sass、LESS 和 Stylus
  2. javascript 判断浏览器
  3. opencv 人脸识别 (一)训练样本的处理
  4. 给特殊类型的Note设置default值
  5. iframe实现页面无刷新上传文件(PHP)----备忘
  6. Redis背后的故事
  7. usb声卡驱动_iCON ProDrive第三代USB声卡驱动全新发布!
  8. 《大数据》期刊“农业大数据”专刊征文通知
  9. python 不显示前几个字符_「Python 秘籍」删除字符串中不需要的字符
  10. 取枚举的参数c语言,求解:如何获得enum类型中枚举值的数量
  11. session和cookie详解
  12. Eclipse 快捷键
  13. 使用Arduino和HMC5883L磁力计的数字罗盘
  14. 俄罗斯方块Tetris Beat for Mac(休闲益智游戏)
  15. LeetCode刷题-190709-扩展:阿拉伯数字和中文数字转换
  16. 工信部推进解除网链屏蔽,微信互联网要终结了?
  17. 2021-09-27 网安实验-取证分析-计算机取证之Xplico
  18. linux之ssh命令详解
  19. 采购申请、采购订单、供应商
  20. 初中数学结合计算机教学设计,初中数学课教学设计与信息技术的有效整合-精选教育文档...

热门文章

  1. 基于STM32的PWM电机驱动TB6612、A4950
  2. C#窗体-个人简历生成(自己设计并编写一个 Windows 应用程序,要求用到TextBox、GroupBox、RadioButton )
  3. SuiteCRM Beans(model)
  4. Biopython -- SeqRecord
  5. Linux 入门必备命令
  6. 微信小程序开发(2)—— 简单的页面登陆实现
  7. C盘空间不足的处理方式
  8. WinDirStat下载使用指南,处理电脑空间神器
  9. 使用vue创建项目的详细步骤
  10. 手把手教你用Python操纵Word自动编写离职报告