zoukankan      html  css  js  c++  java
  • 【爬虫】RSA加密演算法

    新浪微博使用RSA加密演算法,RSA加密算法是一种非对称加密演算法。在公开密钥加密和电子商业中RSA被广泛使用。

    公钥与密钥的产生

    假设Alice想要通过一个不可靠的媒体接受Bob的一条私人讯息。她可以用以下的方式来产生一个公钥和一个私钥:

    1. 随意选择两个大的质数p和q,p不等于q,计算n=pq
    2. 根据欧拉函数(r = φ(n),其中r是小于或等于n的正整数中与n互质的数的数目),求得r= φ(n) = φ(p)φ(q) = (p-1)(q-1)
    3. 选择一个小于r的整数e,求得e关于模r的模反元素,命名为d。所谓模反元素,即有这么一个整数d可以使得e×d≡1 mod r,相当于e×d = k×r+1。相当于对一个二元一次方程求解,即相当于计算Ax+By=1,求解这个式子需要计算e和r的最小公约数相似原理的扩展欧几里得算法进行求解(计算)。可以参看维基百科的内容:扩展欧几里得算法
    4. 将p和q的记录销毁

    [N, e]是公钥,[N, d]是私钥。Alice将公钥[N, e]传给Bob,而将她的私钥[N, d]藏起来。

    ----------------------------

    1. Alice选择的两个质数分别为:p=17,q=23。则n=17×23=391。
    2. r= φ(n) = φ(p)φ(q) = (p-1)(q-1)  [P.S. 这里由于p是质数,当然小于p的与p互质的数是p-1个] 。得到r=368。
    3. 选择一个小于r的整数e=19,r=368,最大公约数为:相当于解一个二元一次方程:19x+368y=1 。通过欧几里得计算过程:
      •    1) 368 = 19*19+7;    2) 19 = 7*2+5;     3)  7 = 5*1+2;    4)  5 = 2*2+1    
      •  => 1 = 5  + 2*(-2) = 5 +(7+5*(-1))*(-2) = 5*3 + 7*(-2) = (19+7*(-2))*3 + 7*(-2) = 19*3 + 7*(-8) = 19*3 + (368+19*(-19))*(-8) = 19*155 + 368*(-8)
      •  =>  d = x = 155, k = y = -8
    4.  公钥是[n,e]=[391,19], 私钥就是[n,d]=[391, 155]

    可是这样子,为什么私钥可以保密呢?我们已知的是参数有 n和e,未知的参数有p,q,r,d,k。

    如果要破解必须要私钥d,而如果只知道公钥要怎么计算得到私钥呢?我们要求解方程e×d = k×r+1则必须要知道r,而知道r必须要知道p和q。知道p和q必须要将n进行因式分解。
    大整数的因式分解是一件极其麻烦的事情,必须用暴力拆解。即使在知道因数就是质数的情况下,因为N可能会是几百位上千位的。

    参考资料:

     阮一峰的博客:RSA算法原理(一)RSA算法原理(二)

  • 相关阅读:
    linux du命令
    Linux vmstat命令实战详解
    linux sar命令详解
    xargs 命令教程
    Linux中find命令用法大全
    python suprocess
    Python的f-strings格式化
    python glob的使用
    python getopt()的使用
    Java测试的题目感想
  • 原文地址:https://www.cnblogs.com/xiaoka/p/3127780.html
Copyright © 2011-2022 走看看