Java 加密解密之消息摘要算法(MD5 SHA MAC)

合集下载

MD5哈希算法及其原理

MD5哈希算法及其原理

MD5哈希算法及其原理“ MD5算法介绍。

”MD5消息摘要算法(MD5 Message-Digest Algorithm),是在计算机领域被⼴泛使⽤的⼀种哈希算法,⽤来对信息进⾏完整性保护。

它由美国密码学家Ronald Linn Rivest设计,于1992年公开,⽤以取代MD4算法。

它的规范为RFC 1321。

MD5将⼀个任意长度的数据经过编码得到⼀个128位(16字节)的哈希值,即为MD5值。

01—MD5功能MD5算法对任意长度的消息输⼊,产⽣⼀个128位(16字节)的哈希结构输出。

在处理过程中,以512位输⼊数据块为单位。

02—MD5⽤途及特征MD5通常应⽤在以下场景:1、防篡改,保障⽂件传输可靠性如SVN中对⽂件的控制;⽂件下载过程中,⽹站提供MD5值供下载后判断⽂件是否被篡改;BT中对⽂件块进⾏校验的功能。

2、增强密码保存的安全性。

例如⽹站将⽤户密码的MD5值保存,⽽不是存储明⽂⽤户密码,当然,还会加SALT,进⼀步增强安全性。

3、数字签名在部分⽹上赌场中,使⽤MD5算法来保证过程的公平性,并使⽤随机串进⾏防碰撞,增加解码难度。

MD5算法具有以下特点:1、压缩性任意长度的数据,算出的MD5值长度都是固定的。

2、易计算从原数据计算出MD5值很容易。

3、抗修改性对原数据进⾏任何改动,哪怕只修改1个字节,所得到的MD5值都有很⼤区别。

4、强抗碰撞已知原数据和其MD5值,想找到⼀个具有相同MD5值的数据(即伪造数据)是⾮常困难的。

03—MD5算法过程⽹络中很容易找到MD5算法的相关实现代码,这⾥就不列出了。

我们只需要关⼼它的实现框架即可。

第⼀步:消息填充补长到512的倍数最后64位为消息长度(填充前的长度)的低64位⼀定要补长(64+1~512),内容为100…0(如若消息长448,则填充512+64)第⼆步:分割把结果分割为512位的块:Y0,Y1,…(每⼀个有16个32⽐特长字)第三步:计算初始化MD buffer,128位常量(4个32bit字),进⼊循环迭代,共L次每次:⼀个输⼊128位,另⼀个输⼊512位,结果输出128位,⽤于下⼀轮输⼊第四步:结果最后⼀步的输出即为散列结果128位。

常见的密码加密措施

常见的密码加密措施

常见的密码加密措施常见的密码加密措施#MD5 全称是Message-Digest Algorithm 5(信息-摘要算法5),理论上是⼀种单向的哈希散列,特性:输⼊任意长度的信息,经过处理,输出为128位的⼤整数(数字指纹)(32位16进制数);不同的输⼊⼀般得到不同的结果(唯⼀性);根据128位的输出结果不可能反推出输⼊的信息(不可逆);强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是⾮常困难的。

MD5⽤途:1、防⽌被篡改: 1)⽐如发送⼀个电⼦⽂档,发送前,我先得到MD5的输出结果a。

然后在对⽅收到电⼦⽂档后,对⽅也得到⼀个MD5的输出结果b。

如果a与b⼀样就代表中途未被篡改。

2)⽐如我提供⽂件下载,为了防⽌不法分⼦在安装程序中添加⽊马,我可以在⽹站上公布由安装⽂件得到的MD5输出结果。

3)SVN在检测⽂件是否在CheckOut后被修改过,也是⽤到了MD5.2、防⽌直接看到明⽂: 现在很多⽹站在数据库存储⽤户的密码的时候都是存储⽤户密码的MD5值。

这样就算不法分⼦得到数据库的⽤户密码的MD5值,也⽆法知道⽤户的密码(其实这样是不安全的,后⾯我会提到)。

(⽐如在UNIX系统中⽤户的密码就是以MD5(或其它类似的算法)经加密后存储在⽂件系统中。

当⽤户登录的时候,系统把⽤户输⼊的密码计算成MD5值,然后再去和保存在⽂件系统中的MD5值进⾏⽐较,进⽽确定输⼊的密码是否正确。

通过这样的步骤,系统在并不知道⽤户密码的明码的情况下就可以确定⽤户登录系统的合法性。

这不但可以避免⽤户的密码被具有系统管理员权限的⽤户知道,⽽且还在⼀定程度上增加了密码被破解的难度。

)3、防⽌抵赖(数字签名): 这需要⼀个第三⽅认证机构。

例如A写了⼀个⽂件,认证机构对此⽂件⽤MD5算法产⽣摘要信息并做好记录。

若以后A说这⽂件不是他写的,权威机构只需对此⽂件重新产⽣摘要信息,然后跟记录在册的摘要信息进⾏⽐对,相同的话,就证明是A写的了。

基于MD5的加盐消息摘要Java实现

基于MD5的加盐消息摘要Java实现

基于MD5的加盐消息摘要Java实现作者:赵一凡卞良丛昕来源:《软件导刊》2018年第03期摘要:Java是一种面向对象的编程语言,具有良好的跨平台性,其继承、封装、多态的特征能够使程序更加稳定。

通过对摘要破解网站的测试,发现短语言实现明文摘要加密,安全性并不高,而加盐消息摘要有助于提高加密安全性。

加盐消息摘要保留了MD5算法的优点,通过增加原始明文长度,可解决短明文摘要加密不安全的问题。

测试结果表明,加盐消息摘要的安全性较高,加盐后的消息摘要不易被破解网站反查询破解。

关键词:消息摘要;加盐法;MD5;加密DOIDOI:10.11907/rjdk.172368中图分类号:TP312文献标识码:A文章编号文章编号:16727800(2018)003021403英文摘要Abstract:Java is an object oriented programming language, has a good crossplatform,it’s inheritanc e, encapsulation, multistate features make the program more stable. Through testing the digest to crack the website, we found that the short text is encrypted in plain text is not safe. However, the method with salt can improve the security of the encryption. Salt method to retain the advantages of MD5 algorithm, by increasing the length of the original text to solve the short text summary encryption is not safe. Will be added after the message summary results into the abstract crack site. The results show that the safety of salt method is higher, and the message digest after salt is not easy to be cracked.英文关键词Key Words:message digest; method with salt; MD5; encryption0引言信息技术的快速发展,使资源获取变得越来越便捷,因此人们对身份和信息的完整性、保密性及信息的安全传输极为关注。

md5是啥意思作用

md5是啥意思作用

MD5是啥意思作用1. 引言在计算机科学和信息安全领域,MD5是一种广泛应用的哈希函数。

通过将输入数据转换为固定长度的字符串,MD5可以用于验证数据完整性、生成数字签名和加密密码等诸多用途。

本文将详细介绍MD5的定义、工作原理及其在信息安全中的应用。

2. MD5的定义与特点MD5,即Message Digest Algorithm 5,是一种消息摘要算法。

它最初由Ron Rivest设计于1992年,并于1996年作为RFC 1321正式发布。

MD5产生的摘要通常为128位的二进制数字,也可以表示为32位的十六进制数。

与其他哈希函数相比,MD5具有以下几个特点:•固定长度输出:MD5的输出长度始终为128位,无论输入的数据长度是多少。

这使得MD5非常适用于生成固定长度的标识符或检验和。

•快速计算:MD5的计算速度相对较快,适用于在大量数据中快速查找匹配项的场景。

•冲突概率较高:尽管MD5在常规应用中足够安全,但由于其较短的输出长度和某些缺陷,被证明存在一定的碰撞风险。

这意味着可能存在两个不同的输入产生相同的MD5哈希值。

3. MD5的工作原理MD5的计算过程可以分为以下四个步骤:•填充数据:将输入的数据按照预定的规则进行填充,使得输入数据的位长度满足一定要求。

•初始化变量:初始化四个32位的寄存器,这些寄存器将在哈希计算过程中被更新。

•处理数据:将填充后的输入数据划分为若干个固定长度的数据块,并对每个数据块进行一系列的置换、移位、异或等运算,以更新寄存器中的内容。

•输出结果:将最终更新后的寄存器值按特定顺序连接起来,形成128位的输出结果,即MD5摘要。

4. MD5的应用场景4.1 数据完整性验证MD5常被用于验证数据的完整性,例如下载文件时可以通过计算文件的MD5值与官方提供的MD5值进行比对,从而确定文件是否被篡改或传输过程中是否发生了错误。

4.2 数字签名数字签名是一种对数据进行认证和完整性保护的技术。

加密系列MD5加密和解密算法详解代码示例

加密系列MD5加密和解密算法详解代码示例

加密系列MD5加密和解密算法详解代码示例MD5加密算法是一种广泛应用的密码加密算法,它将任意长度的数据映射为固定长度的128位哈希值。

MD5加密算法是不可逆的,即通过密文无法还原得到原始数据。

MD5加密算法的实现可以通过编写代码来完成。

下面是一个示例的MD5加密算法的代码:```import hashlibdef md5_encrypt(data):md5 = hashlib.md5md5.update(data.encode('utf-8'))return md5.hexdigestif __name__ == '__main__':data = input("请输入需要加密的数据:")encrypted_data = md5_encrypt(data)print("加密结果为:", encrypted_data)```以上代码实现了一个简单的MD5加密算法。

首先导入了`hashlib`模块,该模块提供了一系列用于数据加密的算法,包括MD5算法。

`md5_encrypt`函数接收一个字符串作为输入数据,并将其转换为字节流形式,然后使用`hashlib.md5`方法创建了一个MD5对象。

接着,通过调用MD5对象的`update`方法将输入数据添加到加密流程中。

最后,通过调用MD5对象的`hexdigest`方法获得加密后的结果,并将其返回。

在`if __name__ == '__main__'`下方的代码段中,首先获取用户输入的数据,然后调用`md5_encrypt`函数对其进行加密,并将结果打印到控制台。

下面是MD5解密算法的示例代码:```import hashlibdef md5_decrypt(encrypted_data):md5 = hashlib.md5md5.update(encrypted_data.encode('utf-8'))return md5.hexdigestif __name__ == '__main__':encrypted_data = input("请输入需要解密的数据:")decrypted_data = md5_decrypt(encrypted_data)print("解密结果为:", decrypted_data)```以上代码实现了一个简单的MD5解密算法。

数字证书,数字签名的基本原理,以及如何使用非对称加密技术实现软件的LICENSE机制

数字证书,数字签名的基本原理,以及如何使用非对称加密技术实现软件的LICENSE机制

7
一点密码学的历史故事
非对称加密设想的实现者:
1977年,三位数学家Rivest 、Shamir 和 Adleman 设计 了一种算法,可以实现非对称 加密。这种算法用他们三个人 的名字命名,叫做RSA算法。 从那时直到现在,RSA算法一 直是最广为使用的"非对称加 密算法"。毫不夸张地说,只 要有计算机网络的地方,就有 RSA算法。
3
一点密码学的历史故事
• 第一点 密码体制划分
单向加密算法、对称加密算法、非对称加法三大类。 1、MD5、SHA算法是单向加密算法的代表,单向加密算法是数据完整性验证的 常用算法。散列函数,又称哈希函数、消息摘要函数、单向函数或杂凑函 数。 2、DES&AES算法是对称加密算法的典型代表,对称加密算法是数据存储加密的 常用算法。此外还有PBE——Password-based encryption(基于密码加 密)。其特点在于口令由用户自己掌管,不借助任何物理媒体。 3、RSA算法是非对称加密算法的典型代表,非对称加密算法是数据传输加密的 常用算法。对称加密算法也可以用做数据传输加密,但非对称加密算法在 密钥管理方面更有优势。相对对称加密算法而言,非对称加密算法在安全 级别上等级更高,但非对称加密算法在时间效率上远不如对称加密算法。
• 什么是散列函数,以及用途举例。 • 数据签名简单介绍 。 • 从Bob、Susan、Doug三个人的故事理解 数字签名与数字证书。
9
散列函数
大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为司 法机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5/SHA1等 等算法就可以为任何文件(不管其大小、格式、数量)产生一个同样 独一无二的“数字指纹”,如果任何人对文件做了任何改动,其 MD5/SHA1值也就是对应的“数字指纹”都会发生变化。

MD5加密与Hash加密

MD5加密与Hash加密

MD5加密与Hash加密⼀.Md5加密MD5算法具有以下特点:1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

2、容易计算:从原数据计算出MD5值很容易。

3、抗修改性:对原数据进⾏任何改动,哪怕只修改1个字节,所得到的MD5值都有很⼤区别。

4、强抗碰撞:已知原数据和其MD5值,想找到⼀个具有相同MD5值的数据(即伪造数据)是⾮常困难的。

MD5的作⽤是让⼤容量信息在⽤软件签署私⼈前被""成⼀种保密的格式(就是把⼀个任意长度的字节串变换成⼀定长的数字串)。

除了MD5以外,其中⽐较有名的还有、以及Haval等。

MD5 是⾮对称的加密算法(PS:对称加密就是加密⽤的密码和解密⽤的密码是⼀样的,⾮对称就是加密和解密⽤的密钥不⼀样)1实现代码:2public class MD5 {3/**4 * MD5⽅法5 *6 * @param text 明⽂7 * @param key 密钥8 * @return密⽂9 * @throws Exception10*/11public static String md5(String text, String key) throws Exception {12//加密后的字符串13 String encodeStr=DigestUtils.md5Hex(text + key);14 System.out.println("MD5加密后的字符串为:encodeStr="+encodeStr);15return encodeStr;16 }1718 }⼆.Hash加密1. hashcode值是int的,64位。

int hashCode()。

2. java object类默认的hashcode()计算⽅法是根据对象的内存地址来计算的。

所以可由此来判断默认不重写hashcode()⽅法的两个对象是否相同。

3. 可重写obejetc 类的hashCode()⽅法,去根据object对象的实际内容⽣成hashcode值,⽐如String类,改写了hashcode(),根据string字符串的内容区⽣成hashcode,⽽⾮根据object类默认的内存地址。

JAVA生成MD5校验码及算法实现

JAVA生成MD5校验码及算法实现

JAVA生成MD5校验码及算法实现在Java中,java.security.MessageDigest (rt.jar中)已经定义了MD5 的计算,所以我们只需要简单地调用即可得到MD5 的128 位整数。

然后将此128 位计16 个字节转换成16 进制表示即可。

下面是一个可生成字符串或文件MD5校验码的例子,测试过,可当做工具类直接使用,其中最主要的是getMD5String(String s)和getFileMD5String(File file)两个方法,分别用于生成字符串的md5校验值和生成文件的md5校验值,getFileMD5String_old(File file)方法可删除,不建议使用:package com.why.md5;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.nio.MappedByteBuffer;import java.nio.channels.FileChannel;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MD5Util {/*** 默认的密码字符串组合,用来将字节转换成16 进制表示的字符,apache 校验下载的文件的正确性用的就是默认的这个组合*/protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6','7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };protected static MessageDigest messagedigest = null;static {try {messagedigest = MessageDigest.getInstance("MD5");} catch (NoSuchAlgorithmException nsaex) {System.err.println(MD5Util.class.getName()+ "初始化失败,MessageDigest不支持MD5Util。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java 加密解密之消息摘要算法(MD5 SHA MAC)
本文转自网络
消息摘要
消息摘要(Message Digest)又称为数字摘要(Digital Digest)。

它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生。

如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原摘要比较,就可知道消息是否被改变了。

因此消息摘要保证了消息的完整性。

消息摘要采用单向Hash 函数将需加密的明文"摘要"成一串128bit的密文,这一串密文亦称为数字指纹(Finger Print),它有固定的长度,且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。

这样这串
摘要便可成为验证明文是否是"真身"的"指纹"了。

HASH函数的抗冲突性使得如果一段明文稍有变化,哪怕只更改该段落的一个
字母,通过哈希算法作用后都将产生不同的值。

而HASH算法的单向性使得要
找到到哈希值相同的两个不同的输入消息,在计算上是不可能的。

所以数据的
哈希值,即消息摘要,可以检验数据的完整性。

哈希函数的这种对不同的输入能够生成不同的值的特性使得无法找到两个具有相同哈希值的输入。

因此,如果两个文档经哈希转换后成为相同的值,就可以肯定它们是同一文档。

所以,当希
望有效地比较两个数据块时,就可以比较它们的哈希值。

例如,可以通过比较邮件发送前和发送后的哈希值来验证该邮件在传递时是否修改。

消息摘要算法
消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。

消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络相同上使用。


于其加密计算的工作量相当可观,所以以前的这种算法通常只用于数据量有限的情况下的加密,例如计算机的口令就是用不可逆加密算法加密的。

近年来,随
着计算机相同性能的飞速改善,加密速度不再成为限制这种加密技术发展的桎梏,因而消息摘要算法应用的领域不断增加。

消息摘要算法的特点:
①无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。

②消息摘要看起来是“随机的”。

这些比特看上去是胡乱的杂凑在一起的。

DigestUtils.java Java代码
Hmac.java Java代码。

相关文档
最新文档