2、MD5加密

2.1 概述

Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992).

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。

MD5用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。

2.2 算法原理

对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

在MD5算法中,首先需要对信息进行填充,使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N*512+448,N为一个非负整数,N可以是零。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,信息的位长=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。

2.3 Java中的MD5实现

MD5加密算法的Java实现如下所示:

package amigo.endecrypt;import java.security.MessageDigest;/** * 采用MD5加密* @author Xingxing,Xie* @datetime 2014-5-31 */
public class MD5Util {/*** * MD5加密 生成32位md5码* @param 待加密字符串* @return 返回32位md5码*/public static String md5Encode(String inStr) throws Exception {MessageDigest md5 = null;try {md5 = MessageDigest.getInstance("MD5");} catch (Exception e) {System.out.println(e.toString());e.printStackTrace();return "";}byte[] byteArray = inStr.getBytes("UTF-8");byte[] md5Bytes = md5.digest(byteArray);StringBuffer hexValue = new StringBuffer();for (int i = 0; i < md5Bytes.length; i++) {int val = ((int) md5Bytes[i]) & 0xff;if (val < 16) {hexValue.append("0");}hexValue.append(Integer.toHexString(val));}return hexValue.toString();}/*** 测试主函数* @param args* @throws Exception*/public static void main(String args[]) throws Exception {String str = new String("amigoxiexiexingxing");System.out.println("原始:" + str);System.out.println("MD5后:" + md5Encode(str));}
}

测试结果:

原始:amigoxiexiexingxing

MD5后:e9ac094091b96b84cca48098bc21b1d6

3、SHA加密

3.1 概述

SHA是一种数据加密算法,该算法经过加密专家多年来的发展和改进已日益完善,现在已成为公认的最安全的散列算法之一,并被广泛使用。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。散列函数值可以说是对明文的一种“指纹”或是“摘要”所以对散列值的数字签名就可以视为对此明文的数字签名。

安全散列算法SHA(Secure Hash Algorithm,SHA)是美国国家标准技术研究所发布的国家标准FIPS PUB 180,最新的标准已经于2008年更新到FIPS PUB 180-3。其中规定了SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512这几种单向散列算法。SHA-1,SHA-224和SHA-256适用于长度不超过2^64二进制位的消息。SHA-384和SHA-512适用于长度不超过2^128二进制位的消息。

3.2 原理

SHA-1是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。

单向散列函数的安全性在于其产生散列值的操作过程具有较强的单向性。如果在输入序列中嵌入密码,那么任何人在不知道密码的情况下都不能产生正确的散列值,从而保证了其安全性。SHA将输入流按照每块512位(64个字节)进行分块,并产生20个字节的被称为信息认证代码或信息摘要的输出。

该算法输入报文的长度不限,产生的输出是一个160位的报文摘要。输入是按512 位的分组进行处理的。SHA-1是不可逆的、防冲突,并具有良好的雪崩效应。

通过散列算法可实现数字签名实现,数字签名的原理是将要传送的明文通过一种函数运算(Hash)转换成报文摘要(不同的明文对应不同的报文摘要),报文摘要加密后与明文一起传送给接受方,接受方将接受的明文产生新的报文摘要与发送方的发来报文摘要解密比较,比较结果一致表示明文未被改动,如果不一致表示明文已被篡改。

MAC (信息认证代码)就是一个散列结果,其中部分输入信息是密码,只有知道这个密码的参与者才能再次计算和验证MAC码的合法性。

3.3 Java中的SHA实现

SHA的在Java的实现与MD5类似,参考代码如下所示:

package amigo.endecrypt;import java.security.MessageDigest;/** * 采用SHAA加密* @author Xingxing,Xie* @datetime 2014-6-1 */
public class SHAUtil {/*** * SHA加密 生成40位SHA码* @param 待加密字符串* @return 返回40位SHA码*/public static String shaEncode(String inStr) throws Exception {MessageDigest sha = null;try {sha = MessageDigest.getInstance("SHA");} catch (Exception e) {System.out.println(e.toString());e.printStackTrace();return "";}byte[] byteArray = inStr.getBytes("UTF-8");byte[] md5Bytes = sha.digest(byteArray);StringBuffer hexValue = new StringBuffer();for (int i = 0; i < md5Bytes.length; i++) {int val = ((int) md5Bytes[i]) & 0xff;if (val < 16) { hexValue.append("0");}hexValue.append(Integer.toHexString(val));}return hexValue.toString();}/*** 测试主函数* @param args* @throws Exception*/public static void main(String args[]) throws Exception {String str = new String("amigoxiexiexingxing");System.out.println("原始:" + str);System.out.println("SHA后:" + shaEncode(str));}
}

测试结果如下所示:

原始:amigoxiexiexingxing

SHA后:04f79f496dd6bdab3439511606528a4ad9caac5e

3、SHA-1和MD5的比较

因为二者均由MD4导出,SHA-1和MD5彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:

1)对强行攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2^128数量级的操作,而对SHA-1则是2^160数量级的操作。这样,SHA-1对强行攻击有更大的强度。

2)对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。

3)速度:在相同的硬件上,SHA-1的运行速度比MD5慢。

MD5加密算法与SHA加密算法相关推荐

  1. vue.js中DES、RSA、SHA1、MD5这四种加密算法的使用

    vue.js中DES.RSA.SHA1.MD5这四种加密算法的使用 DES RSA SHA1 MD5 DES 美国 数据加密标准(DES)是对称密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也 ...

  2. java中的对称加密算法和非对称加密算法

    一.对称加密算法 指加密和解密使用相同密钥的加密算法.对称加密算法用来对敏感数据等信息进行加密,常用的算法包括DES.3DES.AES.DESX.Blowfish..RC4.RC5.RC6.     ...

  3. 对称加密算法、非对称加密算法、散列函数与数字签名的介绍

    1.对称加密 对称加密算法是应用较早的加密算法,技术成熟.在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去.收信方收到密文后,若想解读 ...

  4. 常用加密算法之非对称加密算法

    非对称加密算法 非对称加密算法是一种密钥的保密方法. 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey).公开密钥与私有密钥是一对,如果用公开密钥对数据进行加 ...

  5. 不可逆加密算法有哪些_对称加密算法和非对称加密算法

    对称加密算 对称加密算法是加密和解密时使用相同的密钥,主要用于保证数据的机密性.最具有代表性的算法是20世纪70年代IBM公司提出的DES(dataencryption standard)算法:在此基 ...

  6. 简析无线网络加密算法之CCMP加密算法

    原文地址:http://www.jiamisoft.com/blog/2586-ccmpjiamisuanfa.html [导读] 为了加强无线网络的安全性,增加被破解的难度,局域网/城域网标准委员会 ...

  7. 对称加密算法与非对称加密算法

    目录 一.什么是对称加密算法 二.常用的对称加密算法 三.AES算法 1.ECB工作模式 2.CBC工作模式 3.小结 四.非对称加密算法 五.对称加密算法与非对称加密算法的区别 一.什么是对称加密算 ...

  8. MD5与SHA加密算法

    当用户提交的用户名和密码后不能直接存入数据库中,需要对密码加密后存入数据库中 代码如下 import java.security.MessageDigest; import sun.misc.BASE ...

  9. 加密算法之SHA(SHA1、SHA256)

    前言 本章讲解典型的加密算法SHA(SHA1.SHA256) 方法 1.概念 安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安 ...

最新文章

  1. html5 桌面定时提醒,H5界面实现桌面推送通知
  2. 数据科学很性感?不,其实它非常枯燥!
  3. LeCun预言的自监督模型来了:首个多模态高性能自监督算法,语音、图像文本全部SOTA...
  4. 【模型解读】说说移动端基准模型MobileNets
  5. ECCV 2018 《Triplet Loss in Siamese Network for Object Tracking》论文笔记
  6. 【跃迁之路】【500天】程序员高效学习方法论探索系列(实验阶段257-2018.06.20)...
  7. C#中使用JavaScriptSerializer类实现序列化与反序列化
  8. mysql按月分列统计_实现mysql按月统计的教程
  9. 笔记:Microservices for Java Developers
  10. nginx 启动命令_Nginx实战001:Window中配置使用Nginx入门
  11. windows下C语言多线程编程
  12. MySQL: ERROR13(HY000):Can't get stat of的问题
  13. 西门子电机选型参考一
  14. “仿宋_GB2312、楷体_GB2312、方正小标宋简体”的下载和安装方式【实操】
  15. java工作愿景_2018年年终总结以及来年目标愿景
  16. 使用SpringBoot+Shiro实现记住我功能
  17. 附032.Kubernetes实现蓝绿发布
  18. android 键盘 码,Android键盘输出增加按键码
  19. 【SDOI2013】项链 题解
  20. 修改基于formView的MFC单文档背景颜色

热门文章

  1. 知识点滴 - 我们的太阳系
  2. 【转】苏宁500万日订单下的高可用拼购系统,到底暗藏了什么“独门秘籍”?
  3. 电脑里的文档不小心删除了恢复的方法
  4. java noi和io
  5. 移动用户远程接入L2TP配置详解
  6. live2d 3行代码 为网站添加萌萌哒看板娘
  7. word2vec的词向量神经网络的embedding层的关系
  8. 中国中型皮卡市场趋势报告、技术动态创新及市场预测
  9. 智商黑洞(门萨Mensa测试)11
  10. shell递归遍历目录中的所有文件、文件夹