带你真正的了解加密和Hash

栏目: 编程工具 · 发布时间: 6年前

内容简介:通信双方使用原始字符:ABCDEFGHIJKLMNOPQRSTUVWXYZ密码字符:BCDEFGHIJKLMNOPQRSTUVWXYZA

一.对称加密

1.原理

通信双方使用 同一个密钥 ,使用加密算法配合上密钥来加密,解密时使用加密过程的完全逆过程配合密钥来进行解密。

2.例子

原始字符:ABCDEFGHIJKLMNOPQRSTUVWXYZ

密码字符:BCDEFGHIJKLMNOPQRSTUVWXYZA

原始书信:I love you

加密书信:J mpwf zpv

解读后:I love you

这里的 算法就是每个字符采用后一位的字符替换,密钥就是原始的英文字母表

3.算法

  • DES (56 位密钥,密钥太短被逐渐被弃用)
  • AES (128 位、192 位、256 位密钥,现在最流行) 密钥长增加破解的难度和成本

4.缺点

因为加密和解密都用的相同的密钥,如果密钥再传输过程中被截获,那么信息很容易就会被破解甚至伪造身份(如网络通信过程中,A和B是两个不认识的用户要通信,那么A要把密钥先传给B再开始通信,这样B在接收密钥的过程中可能被第三方劫持从而造成密钥的泄露,第三方取到密钥后便可以破解加密信息)。

5.破解思路

拿到一组或多组原文-密文对 设法找到一个密钥,这个密钥可以将这些原文-密文对中的原文加密为密文,以及将密文解密为原文的组合,即为成功破解。

反破解 让破解者找不到穷举法(暴力破解法,可以理解为一个一个尝试)更有效的破解手段,并 且穷举法的破解时间足够长(例如数千年,那么认为不可破解)。

二.非对称加密

1.原理

使用公钥对数据进行加密得到密文;使用私钥对数据进行解密得到原数据,加密解密用的算法相同,公钥私钥互相是可解的 (所以可以用于数字签名技术,但双方不能替换,因为公钥是要暴露出去的,是可以被劫获的)。

带你真正的了解加密和Hash

2.例子

原数据:110 ---->加密算法都是普通的加法 公钥是加4,私钥是加6

加密数据:554

解密数据:111110 ---->去掉每个的第一位,得出原数据110(注意:溢出是满足非对称加密一个很重要的条件)。

3.签名验证

带你真正的了解加密和Hash

由于私钥和公钥互相可解,因此非对称加密还可以应用于数字签名技术(主要是为了验证数据的来源,也就是要确定是我给你发的数据而不是别人给你发的数据, 防止数据被篡改被伪造 ) 。

发送方用自身私钥加密,接收方获取签名数据后用发送方的公钥解密(验证)获取原数据,然后用获取的原数据和发送来的原数据比对是否一致,一致则证明数据是从目标发送过来的。

带你真正的了解加密和Hash

通常会将原数据做hash处理后再加密,降低原数据签名后的数据大小 (例如你要传10G大小的文件,那么原数据10G,作为比对的签名数据难道也要放10G吗?不能这么做,非常消耗流量和速度。所以直接对文件的hash值进行签名,最后比对hash值即可)。

为什么签名验证可以证明数据的来源是安全的(也就是是我发的而不是别人伪发或伪造的)
模拟场景:
伪造方换原数据-->签名数据验证以后的Hash和伪造数据的Hash不相同,验证失败。
伪造方换原数据和签名数据-->公钥验证后的数据和被换数据的Hash不符,验证失败。(因为签名数据是用的换数据方自身私钥签名的,只有与其对应的公钥可以还原回原Hash值,但此时用的还是原数据方的公钥去做的验证,所以公钥解密后得到的并不是伪造数据的Hash值)。
综上:信息是没有被伪造可能的。

4.加密解密、签名验证的配合使用(开发中常见的使用方式)

带你真正的了解加密和Hash

4.1 例子

带你真正的了解加密和Hash

使用非对称加密通信,可以在不可信网络上将双方的公钥传给对方,然后在发消息前分别对消息使用 对方的公钥来加密和使用自身的私钥来签名,做到不可信网络上的可靠密钥传播及加密通信。

A和B通信,首先B要把自己的公钥发给A,A用B自己的公钥加密数据传给B,B再用自己的私钥解密。但是公钥因为是暴露的,可能被C获得,那么C获取B的公钥后完全可以自己发伪造消息给B,所以A和B通信的时候B需要知道信息是A发送的,所以通信中A会把自身的公钥发给B,再发送数据的时候对数据用自身的私钥加密,因为公钥私钥互相可解,发送到B后B用A的公钥去解密,比对用B公钥加密B私钥解密和A私钥加密(签名)A公钥解密(验证)的数据结果是否一致,如果一致则证明是A发送的数据而不是别人篡改过的数据。

5.优点

可以在不安全网络上传输密钥,公钥别人拿到也没用,因为他没有私钥无法解数据,而私钥又不会传给别人只是自身持有,没有泄露的风险 。

6.缺点

计算复杂,因此性能相比对称加密差很多。

7.算法

  • RSA (可用于加密和签名)、
  • DSA (仅用于签名,但速度更快)

8.破解思路

和对称加密不同之处在于,非对称加密的公钥很容易获得,因此制造原文-密文对是没有困难的事 所以,非对称加密破解的关键只在于,如何找到找到正确的私钥,可以解密所有经过公钥加密过的密文。找到这样的私钥即为成功破解 由于非对称加密的自身特性,怎样通过公钥来推断出私钥通常是一种思路(例如 RSA),但往往 最佳手段依然是穷举法,只是和对称加密破解的区别在于,对称加密破解是不断尝试自己的新密钥是否可以将拿到的原文-密文对进行加密和解密,而非对称加密是不断尝试自己 的新私钥 是否和公钥互相可解。

三.延伸知识: Hash

1.是什么?

把任意数据转换成指定大小范围(通常很小,例如 256 字节以内)的数据。

2.算法

  • MD5
  • SHA256

3.作用

从数据中提出摘要信息 ,因此最主要用途是数字指纹。 (也就是 根据数据的所有特征 算出一个值)。

4.例子

public class A{

private String name;
private int age;

private void hashCode(){ //只是举一个例子,实际中的hashCode计算要比这个复杂很多,因为要尽量减少Hash碰撞的概率.
    return name.length()+age;
}
}

5.用途

唯一性验证

例如 Java 中的 hashCode() 方法

怎么重写 hashCode 方法?

把 equals() 方法中的每个用于判断相等的变量都放进 hashCode() 中,一起生成一个尽量不会碰撞的整数即可 。

为什么每次重写 equals() 方法都需要?

因为你要把新的判断条件放进 hashCode() 。

特别注意:hashCode相同不代表对象相同,因为它只是数据的特征值,equals方法相同对象才是一样的,但hashCode可以用于**快速检查对象**是否相同,毕竟hashCode只是一个值的比较,而equals是多个值的比较。

6.实际用途

6.1 数据完整性验证

从网络上下载文件后,通过比对文件的 Hash 值(例如 MD5、SHA1),可以确认下载的文件是否有损坏。如果下载的文件 Hash 值和文件提供方给出的 Hash 值一致,则证明下载的文件是完好无损的。

6.2 快速查找

HashMap(通过hashCode/Map的长度-1算出一个余数,根据余数确认在数组中的index位置,参考HashMap源码)。

6.3 隐私保护

当重要数据必须暴露的时候,有时可以选择暴露它的 Hash 值(例如 MD5),以保障原数据的安全。 例如网站登录时,可以只保存用户密码的 Hash 值,在每次登录验证时只需要将输入的密码的 Hash 值和数据库中保存的 Hash 值作比对就好,网站无需知道用户的密码。这样,当网站数据失窃时,用户不会因为自身的密码被盗导致其他网站的安全也受到威胁(有可能设置的密码都是相同的)。

7.Hash 是加密吗?

不是(划重点!!!) 。Hash 是单向过程,无法进行逆向恢复操作(10G的文件进行hash后可能hashcode只有几KB大小,那么这几KB怎么可能恢复成10G的原文件呢),因此 Hash 不属于加密。(MD5不是加密!!)


以上所述就是小编给大家介绍的《带你真正的了解加密和Hash》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

构建之法(第三版)

构建之法(第三版)

邹欣 / 人民邮电出版社 / 2017-6 / 69.00元

软件工程牵涉的范围很广, 同时也是一般院校的同学反映比较空洞乏味的课程。 但是,软件工程 的技术对于投身 IT 产业的学生来说是非常重要的。作者有在世界一流软件企业 20 年的一线软件开 发经验,他在数所高校进行了多年的软件工程教学实践,总结出了在 16 周的时间内让同学们通过 “做 中学 (Learning By Doing)” 掌握实用的软件工程技术的教学计划,并得到高校师生的积极反馈。在此 ......一起来看看 《构建之法(第三版)》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换