常见加密分类以及接口sign签名

参考文档:

各种加密方式运作原理以及sign签名参考视频


对称加密及RSA非对称加密的原理参考视频1

RSA非堆成加密的原理参考视频2

各种加密方式在线测试网站

参考demo

常见的加密有:对称加密,非对称加密,不可逆加密

sign签名则是使对外暴漏的接口能被安全的不爆露参数的访问


对称加密:

  • 常见的对称加密:AES,DES,Base64加密等
  • 对称加密指的是:加密者和解密者使用同一个密钥,双方需要私下见面约定一个密钥,如果在网络传输的话很有可能被劫持导致信息泄露,且由于原理简单,即使没有劫持到密钥,普通计算机24H以内也可破解,所以不建议使用
  • 对称加密的加密原理:通过对原文的ascii码,经过密钥和一定的数学运算得到密文
  • 对称加密的解密原理:通过对密文的ascli码,经过密钥和数学逆运算得到原文
  • 例如,ABC对应的ascli分别是:65、66、67   双方规定的密钥为3,规定的算法为+,得到的ascli码为:68、69、70,密文为DEF(当然在真正的应用场景比这个复杂的多,这个仅仅是个例子)

非对称加密:

  • 常见的非对称加密:RSA
  • 非对称加密指的是:由于对称加密,加密解密过程相对比较容易被破译,且需要双方通过非网络的形式约定密钥,既不方便有不安全。非对称加密采用的算法→模运算使加密过程相对比较容易,但是解密过程特别困难,甚至不可能。
  • 非对称加密原理:
  1. 模运算

 第一个公式:m的e次方对N取余和c对N取余值是一样的,可以将原文m加密为密文c

 第二个公式:c的d次方对N取余和m对N取余值是一样的,可以将密文c解密为原文m

模运算的特点是知道公钥和私钥,可以很快的得到密文或原文,但是如果不知道公钥或私钥,根据公式去推倒,是几乎不可能的

而且公钥和私钥不能解自身加密过的,但是可以相互解对方加密过的密文,即用公钥加密,即可用私钥解密;用私钥加密,即可用公钥解密。

   2. 数学原理

那么应该怎么得到公钥和私钥呢?

(1).欧拉定理:任何一个正整数 n >1 都可以唯一地分解为一组质数p1,p2的乘积,例如:77 = 7*11,且7和11都为质数

(2).欧拉函数:数是小于n的正整数中与n互质的数的数目φ(n) = (p1-1)(p2-1),例如:小于77且与77互质的数目为φ(77) = (7-1)*(11-1) = 60

(3).N和e,d的选择:

 N的选择一般是随机取一个较大的数,

1 < e  < φ(N),且e与φ(N)互质,满足这两个条件即可

d = ( k * φ(N) +1) / e,k值不定,但是必须保证d算出为整数

(4).例如我们对A进行RSA加密,A的ascli码为65

选取N= 3127 = 53*59(53和59都为质数),

φ(3127) = (53-1)*(59-1) = 52*58 = 3016

 1 < e < 3016,且与3016互质,取e = 3  

d = ( k * φ(N) +1) / e = ( k * 3016 +1) / 3,取 k= 2 ,d = 2011

所以,公钥为(3,3127),私钥为(2011,3127)

(5).我们用上述公钥和私钥对B和C加密

  • 日常应用中要比上述复杂的多 ,我们一般会在本地生成私钥和公钥,然后通过网络把公钥发送给远端。
  • 发送信息时,首先进行私钥的加密处理,送达远端后,远端拿着公钥去解密获取原文。
  • 接受信息时,远端会用公钥给文件加密,送达本地后,本地拿着私钥去解密获取原文。
  • 但是由于公钥和信息都是通过网络传输的,所以容易被人截获,造成信息泄露

  • 为了解决信息容易被截获的问题,所以就有了https协议,即http+ssl
  • 通过第三方机构的CA证书,即第三方的公钥和密钥,来进行双层的加密
  • 具体过程是,本地首先将公钥发送给第三方机构,第三方机构用私钥为本地的公钥加密,生成证书连同第三方机构的公钥 发送给本地
  • 本地将证书,第三方公钥,本地私钥加密后的密文发送给远端
  • 远端用第三方公钥解密证书得到本地公钥,用本地公钥来解密密文
  • 这种方式通过双层加密,但是仍然后一定的安全性问题


不可逆加密:

  • 常见的不可逆加密:MD5
  • 不可逆加密指的是:只管加密,不管解密,也就是说是无法解密的,只能通过比较密文来判断原文是否相等

 

sign接口签名:

  • 我们虽然有基于RSA算法的https协议,但是仍然有安全问题,例如:证书,第三方公钥被截获到,密文也就无效了

  • sign签名:有过期时间的加密的访问路径
  1. 对所有的参数按照ascll码进行升序排序 
{"c":"1","a":"2","b":"3"}

排序后

{"a":"2","b":"3","c":"1"}
  1. 把参数名和参数值连接成字符串
a=2&b=3&c=1
  1. 把凭证用户名和密码放在参数的前面
user=zhangsan&pwd=123&a=2&b=3&c=1
  1. 用时间戳连接到参数的尾部
user=zhangsan&pwd=123&a=2&b=3&c=1&timestamp=20210607
  1. 把这个字符串进行32位MD5加密,再转换成大写
sign = 187B812906E8A76F30BB4FE47C459B5B
  1. 规定一定时间内有效即可
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PH = 7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值