数据交互的加密算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012963866/article/details/75046785

加密算法分类
加密算法介绍和应用
在项目中的使用讨论

加密算法分类

  1. 不可逆加密算法 Hash算法(SHA-1、SHA-256、MD5)
  2. 对称加密算法(DES、3DES、AES(AES-128|AES-256)
  3. 非对称加密算法(RSA、DSA)

不可逆加密


SHA-1
原理:
该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程,产生的输出是一个160位的报文摘要。
场景:
实现数字签名
浏览器验证
注:
数字签名的原理是将要传送的明文通过一种函数运算(Hash)转换成报文摘要(不同的明文对应不同的报文摘要),报文摘要加密后与明文一起传送给接受方,接受方将接受的明文产生新的报文摘要与发送方的发来报文摘要解密比较,比较结果一致表示明文未被改动,如果不一致表示明文已被篡改。


MD5
原理:
对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
场景:
大容让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式,一直性验证
各大型门户网站存储的用户密码的数据形式应该是HASH算法之后的形式,就是把一个任意长度的字节串变换成一定长的十六进制数字串
简单数据通信身份验证,安全访问认证
注:
常见32位,和16位,注意大小写


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


对称加密
思路:
数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。
特点:
加密和解密的密钥只有一个,相同
数据交互双方,密钥需同步
常见:
DES、3DES、AES(AES-128|AES-256)、RC2、RC4、RC5

BASE64编码

计算机中的数据都是二进制的,不管是字符串还是文件,而加密后的也是二进制的
很多算法加密后输出的都是byte[],而这个byte[]对我们显示的形式是不友好的(乱码),因为二进制文件包含很多无法显示和打印的字符
Base64是一种二进制编码方法,二进制到字符串的转换方法
原理
准备一个包含64个字符的数组:
[‘A’, ‘B’, ‘C’, … ‘a’, ‘b’, ‘c’, … ‘0’, ‘1’, … ‘+’, ‘/’]
对二进制数据进行处理,每3个字节一组,一共是3x8=24bit,划为4组,每组正好6个bit:
得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串
不足3的倍数,Base64用\x00字节在末尾补位
这里写图片描述

BASE64编码表
这里写图片描述

DES:

DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其算法主要分为两步:

初始置换
其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则为将输入的第58位换到第一位,第50位换到第2位……依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:设置换前的输入值为D1D2D3……D64,则经过初始置换后的结果为:L0=D58D50……D8;R0=D57D49……D7。
逆置换
经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。
常用分组模式
EBC模式、CBC模式、CFB模式、OFB模式、CTR模式
填充方式
NoPadding(不填充)、Zeros填充(0填充)、PKCS5Padding填充、PKCS7Padding填充

扫描二维码关注公众号,回复: 5944368 查看本文章

3DES:

相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

逻辑实现:
具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密文,这样:
3DES加密过程为:C=Ek3(Dk2(Ek1(P)))
3DES解密过程为:P=Dk1(EK2(Dk3(C)))

AES:
AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES 使用几种不同的方法来执行排列和置换运算。 AES是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。

这里写图片描述


非对称加密


思路:
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
公钥加密
1、乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。
2、得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。
3、乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。
4、在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。
5、同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。

这里写图片描述
私钥签名
有一对公钥A和私钥B。如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道B
是我的私钥),结果所有的人都看到我的内容了,因为他们都知道我的公钥是A,那么这种加密有什么用处呢?
但是H说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥B,加密,加密后的内容是d,发给H,再告诉他解密看是不是c。他用我的公钥A解密,发现果然是c。这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。 这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名。
总结:
公钥和私钥是成对的,它们互相解密。
公钥加密,私钥解密。
私钥数字签名,公钥验证。


SSH免密码登录
这里写图片描述
图解:
Server A免登录到Server B:
在A上生成公钥私钥。
将公钥拷贝给Server B,要重命名成authorized_keys(从英文名就知道含义了)
Server A向Server B发送一个连接请求。
Server B得到Server A的信息后,在authorized_key中查找,如果有相应的用户名和IP,则随机生成一个字符串,并用Server A的公钥加密,发送给Server A。
Server A得到Server B发来的消息后,使用私钥进行解密,然后将解密后的字符串发送给Server B。
Server B进行和生成的对比,如果一致,则允许免登录。
总之:A要免密码登录到B,B首先要拥有A的公钥,然后B要做一次加密验证。对于非对称加密,公钥加密的密文不能公钥解开,只能私钥解开。

比较:
非对称加密与对称加密相比,其安全性更好:
对称加密的通信双方使用相同的秘钥,如果一方的秘钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对秘钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。
非对称加密与对称加密相比,执行时间长
算法执行加密解密过程复杂,加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
对称加密相比
加解密速度快,可用于大数据量的加密
密钥管理困难,需要密钥同步



数据交互一:

这里写图片描述

数据交互二:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/u012963866/article/details/75046785