带你真正的了解加密和Hash

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

内容简介:通信双方使用原始字符: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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

七周七语言

七周七语言

Bruce A.Tate / 巨成、戴玮、白明 / 人民邮电出版社 / 2012-5-8 / 59.00元

内容简介: 从计算机发展史早期的Cobol、Fortran到后来的C、Java,编程语言的家族不断壮大。除了这些广为人知的语言外,还涌现了Erlang、Ruby等后起之秀,它们虽被喻为小众语言,但因其独特性也吸引了为数不少的追随者。 Bruce A. Tate是软件行业的一名老兵,他有一个宏伟目标:用一本书的篇幅切中要害地探索七种不同的语言。本书就是他的成果。书中介绍了Ruby、Io、......一起来看看 《七周七语言》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具