zoukankan      html  css  js  c++  java
  • RSA加密

    RSA加密是典型的非对称加密算法。RSA加密主要由五个部分组成:

    • 原文M
    • 密文C
    • 公钥PU和私钥PR
    • 加密算法E(x)
    • 解密算法D(x)

    RSA算法的实现整体又分为三个过程:

    • 生成密钥对
    • 加密
    • 解密

    实现上述三个步骤用到了六个数学变量p,q,n,φ(n),e,d,下文将会说明。

    rsajm

    简单理解下RSA加密:任何计算机信息都能转换成二进制,也能转换成十进制整数。这里M是一个整数,选择一个数字e进行M的e次方运算,再选取整数N进行取模运算,结果用c表示。比如整数7用公钥(2,23)进行加密后得到密文3,我们可以看到给定M,e,N是很容易算出C的,但是给定e,n,C却很难得出M。这个时候我们就要用到私钥(d,n)来进行解密得到M,RSA的算法规则在适当的选择e和N的前提下一定存在一个d使得C^d mod n=M。RSA最复杂的地方在于如何适当的选择e和n,又如何运算出d。

    数学基础

    1. 素数

      质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。
      
    2. 同余

       ≡ :同余号。两个整数a,b,若它们除以整数m所得的余数相等,则称a,b对于模m同余
      记作 a ≡ b (mod m) 
      # 3 mod 2 ≡ 1
      
    3. 互质

      互质是公约数只有1的两个整数,叫做互质整数。
       * 任意两个质数构成互质关系,比如13和61
       * 一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如3和10
       * 如果两个数中,较大的那个数是质数,则两者构成互质关系,比如97和57
      	以上两条规则,可以抽象为ー条:质数,和不为自己倍数的自然数互质。
       * 1和任意一个自然数都是互质关系
       * p是大于1的整数,则p和p-1构成互质关系,比如57和56
       * p是大于1的奇数,则p和p-2构成互质关系,比如17和15
      
    4. 平方剩余

      假设p是素数,a是整数。 如果存在一个整数x使得x^2≡a(mod p) (即x^2-a可以被p整除), 那么就称a在p的同余类中是平方剩余的。
      
    5. 欧拉函数

      给定任意正整数n,计算在小于等于n的正整数中,有多少个与n构成互质关系,计算这个值的方法叫做欧拉函数。
      
      • 第一种情况:

        如果n=1,则φ(1)=1。1与任何自然数都构成互质。

      • 第二种情况:

        如果n是质数,则φ(n)=n-1。质数与每个小于他的数都构成互质。

      • 第三种情况:

        如果n是质数的某一个次方,即n=p^k(p为质数,k<=1),则

        [φ(p^k)=p^k-p^{k-1}=p^{K(1-frac1p)} ]

      • 第四种情况:

        n可以分解成两个互质的整数之积,n=p1*p2,则φ(n)=φ(p1p2)=φ(p1)φ(p2)。

      • 第五种情况:

        任意大于1的整数,都可以写成一系列质数的积。

        [n=p^{k1}_1p^{k2}_2p^{k3}_3...p^{kr}_r ]

        根据第四条结论

        [φ(n)=φ(p^{k1}_1)φ(p^{k2}_2)...φ(p^{kr}_r) ]

        根据第三条结论

        [φ(n)=p^{k1}_1p^{k2}_2p^{k3}_3...p^{kr}_r(1-frac1{p1})(1-frac1{p2})...(1-frac1{pr}) ]

        等于

        [φ(n)=n(1-frac1{p1})(1-frac1{p2})...(1-frac1{pr}) ]

        例:

        [φ(1323)=φ(3^2*7^2)=1323*(1-frac13)(1-frac17)=756 ]

    6. 欧拉定理

      如果两个正整数a和n互质,则n的欧拉函数φ(n)可以让下面的式子成立:

      [a^{φ(n)}≡1(mod\,n) ]

      a的φ(n)次方减去1能被n整除

    7. 费马小定理(费马小定理是欧拉定理的一个特例)

      如果p是一个质数,而整数a不是p的倍数,则

      [a^{p-1}≡1(mod\,p) ]

    8. 模反元素

      如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除

      [ab≡1(mod\,n) ]

    RSA加密过程

    生成密钥对

    1. 随机生成两个足够大的素数p,q
    2. 计算公共模数 n=p*q
    3. 计算欧拉函数φ(n)=(p−1)∗(q−1)p,q必须严格保密。
    4. 选取一个与φ(n)互质的数e作为公钥指数,且1<e<φ(n)。公钥PU=(e,n)
    5. 计算私钥指数d,d满足(d*e)mod φ(n)=1私钥PR=(d,n)

    加密

    [C=M^emod\,n(C为密文) ]

    解密

    [M=C^dmod\,n(M为明文) ]

    目前被破解的最长RSA密钥就是768位,因此我们认为1024位以上的密钥长度是安全的。

  • 相关阅读:
    streamsets 集成 cratedb 测试
    streamsets k8s 部署试用
    streamsets rest api 转换 graphql
    StreamSets sdc rpc 测试
    StreamSets 相关文章
    StreamSets 多线程 Pipelines
    StreamSets SDC RPC Pipelines说明
    StreamSets 管理 SDC Edge上的pipeline
    StreamSets 部署 Pipelines 到 SDC Edge
    StreamSets 设计Edge pipeline
  • 原文地址:https://www.cnblogs.com/yangyu-IoT/p/13069804.html
Copyright © 2011-2022 走看看