zoukankan      html  css  js  c++  java
  • 加密算法

    参考文献:

    http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

    http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

    两种加密方式:对称加密和非对称加密

    一.对称加密:加密解密使用同种规则(“密钥”)。

    二.非对称加密:加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可。

    RSA算法前奏:

    1.互质:两个正整数,除了1以外,没有其他公因子;

    2.欧拉函数(用φ(n)表示):任意给定正整数n,计算小于等于n的正整数之中与n构成互质关系的个数;

    关于计算φ(n):

    a.如果n=1,则 φ(1) = 1 。因为1与任何数(包括自身)都构成互质关系;

    b.如果n是质数,则 φ(n)=n-1 。因为质数与小于它的每一个数,都构成互质关系;

    c.如果n是质数的某一个次方,即 n = pk (p为质数,k为大于等于1的整数),则φ(pk)=pk-pk-1=pk(1-1/p);

    d.如果n可以分解成两个互质的整数之积,n=p1p2,则φ(n)=φ(p1p2)=φ(p1)φ(p2);

    e.因为任意一个大于1的正整数,都可以写成一系列质数的积,n=p1k1p2k2...prkr,根据d得到:φ(n)=φ(p1k1)φ(p2k2)...(prkr),再根据c得到:φ(n)=p1k1p2k2...prkr(1-1/p1)(1-1/p2)...(1-1/pr),也就等于:φ(n)=n(1-1/p1)(1-1/p2)...(1-1/pr)。

    3.欧拉定理(RSA算法的核心):如果两个正整数a和n互质,则n的欧拉函数 φ(n) 可以让下面的等式成立

    aφ(n)Ξ1(mod n)

    注:假设正整数a与质数p互质,因为质数p的φ(p)等于p-1,则欧拉定理可以写成

    ap-1Ξ1(mod p)   ......费马小定理

    4.模反元素:如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1

    abΞ1(mod n)    ......b叫做a的模反元素,b+kn都是a的模反元素

    欧拉定理证明模反元素

    aφ(n)Ξ1(mod n)=aaφ(n)-1

    可以看到,a的 φ(n)-1 次方,就是a的模反元素。

    密钥生成步骤:

    1.随机选择两个不想等的质数p和q;

    2.质数相乘得n;

    3.计算n的欧拉函数φ(n),根据欧拉函数第二、四点

    φ(n)=φ(pq)=φ(p)φ(q)=(p-1)(q-1);

    4.随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质,通常情况选65537;

    5.计算e对于φ(n)的模反元素d

    ed ≡ 1 (mod φ(n))

    等价于

    ed - 1 = kφ(n)

    令d=x,k=y,可得

    ex + φ(n)y = 1

    已知e和φ(n),采用扩展欧几里得算法可求得一组解,即d;

    6.将n和e封装成公钥,n和d封装成私钥,公钥(n,e),私钥(n,d)。

    RSA算法的可靠性:密钥生成过程总共产生了6个数,分别是:p、q、n、φ(n)、e、d。公钥用到(n,e),私钥用到(n,d),所以d是解密的关键

    不妨反推:根据已知公钥的n和e,由ed ≡ 1 (mod φ(n)),要想得到d,必须得到φ(n),又由φ(n)=(p-1)(q-1)知,要求的φ(n),就需要知道p和q,而pq=n,所以需要将n因式分解才能得到p和q。n分解的难道决定算法的难度。

    加密解密:

    1.加密过程,加密用公钥(n,e),对m进行加密

    me ≡ c (mod n)    ......c就是加密之后的m,m信息以c的形式传递

    注:m必须是整数(字符串可以取ascii值或unicode值),且m必须小于n。

    2.解密过程,解密用私钥(n,d),对c进行解密

    cd ≡ m (mod n)    ......m就是解密之后的c

    私密解密证明:

    cd ≡ m (mod n)

    根据加密规则me ≡ c (mod n),所以c = me - kn

    将c代入cd ≡ m (mod n),则

    (me - kn)d ≡ m (mod n)

    等同于

    med ≡ m (mod n)

    又由于ed ≡ 1 (mod φ(n)),所以ed = hφ(n)+1

    将ed带入med ≡ m (mod n),则

    mhφ(n)+1 ≡ m (mod n)

    若m和n互质

    根据欧拉定理

    mφ(n) ≡ 1 (mod n)

    得到

    (mφ(n))h × m ≡ m (mod n)

    若m和n不是互质关系

    由于n等于质数p和q的乘积,所以m必然等于kp或kq,根据欧拉定理,下式成立

    (kp)q-1 ≡ 1 (mod q)

    进一步得到

    [(kp)q-1]h(p-1) × kp ≡ kp (mod q)

    (kp)ed ≡ kp (mod q)

    改写如下

    (kp)ed = tq + kp

    这时t必然能被p整除,即 t=t'p

    (kp)ed = t'pq + kp

    因为 m=kp,n=pq,所以

    med ≡ m (mod n)

  • 相关阅读:
    Echarts柱状图,颜色随机改变
    输入地名查询出经纬度
    简单的JS数组所有重复元素抽出到一个新数组
    zTree 树形中的搜索定位节点
    vue js 中简单的搜索功能
    百度地图,多边形覆盖物区域,加标签
    pyspider 介绍
    网站的免责声明应当如何撰写才能保护自己的权益
    sftp 设置默认权限
    【聚类算法】谱聚类(Spectral Clustering)
  • 原文地址:https://www.cnblogs.com/ytwy/p/5520534.html
Copyright © 2011-2022 走看看