加密算法之安全hash算法、RSA非对称加密算法分析

前言

数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码为“密文”,使其只能在输入相应的密钥之后才能显示出原容,本篇会介绍各种加密算法。

加密介绍

  • 第一类(SHA算法):根据明文签名进行加密得到密文,而密文不能被反推出来,而这种在银行用得很多,例如下图

 SHA hash独有得算法,算法可以有多种,根据每个人来算出来

  • 第二类(DES AES):明文得到密文,通过密文;然后服务端得到密文进行反推出来,一把钥匙

  •  第三类(RSA):叫做RSA算法加密,公钥和私钥,例如git等等得应用;一把锁,但有两把钥匙可以上锁,一种钥匙可以上锁也可以打开这叫私钥,另一种只能上锁,不能打开 叫做公钥,所有得网络公司都用这种

 SHA算法

     是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。

 同类型算法

     SHA1  SHA224  SHA256  SHA384  SHA512  MD5  HmacMD5 HmacSHA1  HmacSHA224  HmacSHA256  HmacSHA384  HmacSHA512   PBKDF2

包括常用得md5算法,缩减版得sha1

注意

 只要是哈希函数,就存在碰撞,所谓碰撞的意思是,有两个不同的数据,他们的哈希值相同(SHA1值相同)但是很少得,达到千万分之一

实现方式

  • 以“abc”字符串来说明问题,因为 'a'=97 'b'=98  'c'=99 所以将其转换为位串后为:01100001 01100010 01100011;
  • 对转换后的位字符串进行补位操作

  Sha-1算法标准规定,必须对消息摘要进行补位操作,即将输入的数据进行填充,使得数据长度对512求余的结果为448 ,填充比特位的最高位补一个1,其余的位补0,如果在补位之前已经满足对512取模余数为448,也要进行补位,在其后补一位1即可。 总之,补位是至少补一位,最多补512位,我们依然以“abc”为例,其补位过程如下:
  初始的信息摘要:01100001 01100010 01100011
  第一步补位:    01100001 01100010 01100011 1
  ..... ......
  补位最后一位:  01100001 01100010 01100011 10.......0(后面补了423个0)
  而后我们将补位操作后的信息摘要转换为十六进制,如下所示:
  61626380 00000000 00000000 00000000
  00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000
  00000000 00000000

  • 附加长度值,后面存放字符长度 一旦超过长度,则分为几块进行加密

  在信息摘要后面附加64bit的信息,用来表示原始信息摘要的长度,在这步操作之后,信息报文便是512bit的倍数。通常来说用一个64位的数据表示原始消息的长度,如果消息长度不大于2^64,那么前32bit就为0,在进行附加长度值操作后,其“abc”数据报文即变成如下形式:
  61626380 00000000 00000000 00000000
  00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000018
  因为“abc”占3个字节,即24位 ,换算为十六进制即为0x18,

  •  初始化缓存,采用大端存储模式

  一个160位MD缓冲区用以保存中间和最终散列函数的结果。它可以表示为5个32位的寄存器(H0,H1,H2,H3,H4)。初始化为:
  H0 = 0x67452301
  H1 = 0xEFCDAB89
  H2 = 0x98BADCFE
  H3 = 0x10325476
  H4 = 0xC3D2E1F0
  大端存储模式:高位数据放在低地址,低位数据放在高地址

  •  计算消息摘要  (密文)

  S函数
    循环左移操作符Sn(x),x是一个字,也就是32bit大小的变量,n是一个整数且0<=n<=32。Sn(X) = (X<<n)OR(X>>32-n)
  常量字k(0)、k(1)、...k(79)
    Kt = 0x5A827999  (0 <= t <= 19)
    Kt = 0x6ED9EBA1 (20 <= t <= 39)
    Kt = 0x8F1BBCDC (40 <= t <= 59)
    Kt = 0xCA62C1D6 (60 <= t <= 79)
  非线性函数
    所要用到的一系列函数
      Ft(b,c,d)  ((b&c)|((~b)&d))    (0 <= t <= 19)
      Ft(b,c,d) (b^c^d)             (20 <= t <= 39)
      Ft(b,c,d) ((b&c)|(b&d)|(c&d))  (40 <= t <= 59)
      Ft(b,c,d) (b^c^d)               (60 <= t <= 79)
    根据结果无法反推
  开始计算摘要
    计算需要一个缓冲区,由5个32位的字组成,还需要一个80个32位字的缓冲区。第一个5个字的缓冲区被标识为A,B,C,D,E。80个字的缓冲区被标识为W0, W1,..., W79
    另外还需要一个一个字的TEMP缓冲区。
    为了产生消息摘要,在补好位的数据中前16个字的数据块M1, M2,..., Mn
    会依次进行处理,处理每个数据块Mi 包含80个步骤。
    现在开始处理M1, M2, ... , Mn。为了处理 Mi,需要进行下面的步骤
    (1). 将 Mi 分成 16 个字 W0, W1, ... , W15,  W0 是最左边的字
    (2). 对于 t = 16 到 79 令 Wt = S1(Wt-3 XOR Wt-8 XOR Wt- 14 XOR Wt-16).
    (3). 令 A = H0, B = H1, C = H2, D = H3, E = H4.
    (4) 对于 t = 0 到 79,执行下面的循环
    TEMP = S5(A) + ft(B,C,D) + E + Wt + Kt;
    E = D; D = C; C = S30(B); B = A; A = TEMP;
    (5). 令 H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D, H4 = H4 + E.
    在处理完所有的 Mn, 后,消息摘要是一个160位的字符串,以下面的顺序标识
    H0 H1 H2 H3 H4.

进行循环位数;

 不断得变加工,计算,最后得到得摘要就为千万分之一,并且不是线性得。散列函数,不断调用得。

RSA非对称加密算法

什么是RSA公钥加密算法

RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年7月首次在美国公布,当他们三人都在美国麻省理工学院工作实习,RSA就是他们三人姓氏得开头字母一起拼在一起得。

RSA是目前最有影响力和最常用得公钥加密算法,他能够抵抗到目前为止已知得绝大数密码攻击,已被iso推荐为公钥数据加密的标准。

今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。
但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战和质疑。

算法思想

1970年以前,密码学一直使用的是对称密钥,如果一个人需要和多人分享信息,比如银行需要存放所有人的密码,来进行信息交换,必然需要管理所有的密钥,能否有一种更简单的方法

1970年一个英国工程师和数学家James H.Ellis 在研究一个非秘密的加密想法,基于一个简单又聪明的想法,上锁和解锁是相反的操作
他可以把锁打开,交给对方后,由对方上好锁,再还给他,由他自己开锁
这样他可以大量发出他的信息,而只需要保留单个钥匙
当然他给出了工作原理,但不知如何用数学方法解决  也就是

而到了后期,被另一个数学家和密码专家Cocks发现,他需要一个特殊的单向函数,正推容易,求逆很难 

被另一个数学家和密码专家Cocks发现,他需要一个特殊的单向函数,正推容易,求逆很难

 继续将公因子扩大,所得的值只在17之内不断变换

 然后如果知道结果为9,然后 17为密钥得到  这个值是很难的,也就是

而反过来 是很难的

 这里做函数的推导

 然后做函数转换

 最后带入进去得到下面的函数

 

 求素数的因子分解589=19*31,计算很难,如果是个1000位数呢?

这里然后往深处深追,欧拉一个重要的函数phi(n),用于找到整数的可分解性

这就要说到费马小定理 

假设p是一个质数(一个大于1的自然数,除了1和它本身外,不能被其他自然数整除),而整数a不是p的倍数   

        a^p-a (a的p次方-a)一定是p的倍数

        a^(p-1)-1 一定是p的倍数

        a^(p-1) =1(mod p)   这里 a的p-1次方 和1对p取余相等

通过杨辉三角进行证明

而杨辉三角是什么,杨辉三角,则是由左上和右上的两个数进行相加得到的数,

上面的杨辉三角满足的公式就是下面的,从1开始这个公式  x+1; x^2+2*x+1;往下进行推导

 上面的杨辉三角满足的特性

其中只看质数这一个的时候,中间的数据,都等于当前数的倍数,这也算是一个规律。

 1,3,5,7.。。。,也就是刚才的规律。

 

 

 归纳法中是正确的。

然后欧拉提出了一个欧拉总计函数

也就是n取正整数,在<=n的正整数中,计算与n互质的个数 计成fn(8)=4,互质,没有公约数,比如说小于8的 质数 就为4个,

 7为质数,求7的互为质数,那就 一定有n -1个互为公约数。 把n分解为两个素数

 则下面的

 最后欧拉推出来,并不需要一定是质数,但是只需要是有相同的公约数就行了。

RSA算法推论

通过前面的时间公式  往下进行推

 而这个d是未知数, 然后得到的结果

然后同时乘以m

 提多项式

 欧拉定理

RSA的推导算法

 加密和解密的公钥也是利用的这个公式

 

公钥的生成

生成私钥的方式

 

然后加密过的数据

 

 事实上,如果n足够大,需要几千年才能破解。

 结语

最后本篇主要是介绍的是银行常用的hash算法,和非对称加密算法,其中涉及包括hash算法中按非线性组合,和rsa算法中应用了费马定理。以及改进的欧拉定理,怎么推出的rsa算法;下篇文章我会介绍对称加密,及在jdk中应用的各种api实现

加密算法之对称加密(AES加密) 及在jdk中应用

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

踩踩踩从踩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值