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位以上的密钥长度是安全的。

  • 相关阅读:
    Java continue break 制作简单聊天室程序,屏蔽不文明语言,显示每句话聊天时间 for(;;) SimpleDateFormat("yyyy-MM-dd hh:mm:ss") equalsIgnoreCase
    Java实现随机出题,10道10以内加减法计算
    Java发出声卡蜂鸣生的方法
    Java程序调用自动关机指令 1分钟内自动关机
    Java如何将十六进制数转换为十进制数的自编程序
    告诉你今年是哪个生肖年的java程序
    更新MySQL数据库( java.sql.SQLException: No value specified for parameter 1) 异常 解决方法
    把网上图片下载到本地的java工具类
    exp ORA-01455: converting column overflows integer datatype
    shell date 格式化
  • 原文地址:https://www.cnblogs.com/yangyu-IoT/p/13069804.html
Copyright © 2011-2022 走看看