• RSA原理说明


    长度,建议至少1024。模数n(常取默认65537)两边都要用。

    指数e,和n一起就是公钥。

    指数d,和n一起就是私钥。

    质数p和q用于生成密钥对,然后就丢弃不公开。

    一。密钥对的生成步骤

    1、随机选择两个不相等的质数p和q。

    2、计算p和q的乘积n。

    3、计算p-1和q-1的乘积m。

    4、随机选个整数e,e与m要互质,且0<e<m。

    5、计算e的模反元素d。

    6、n,e组成公钥,n,d组成私钥。

    用公钥(n, e)加密:明文e ≡ 密文 (mod n)

    用私钥(n, d)解密:密文d ≡ 明文 (mod n)

    上述表达式是同余式,也就是“≡”两边mod n是相等的。mod运算就是取被除数 / 除数得到的余数,运算符是%。比如5%3=2。所以上式也可表达成

    用公钥(n, e)加密:密文 = 明文e % n

    用私钥(n, d)解密:明文 = 密文d % n

     

    一。

    i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
    i mod 4 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
    i mod 7 0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 2 3 4 5

    (a % 4)是以4为周期在循环,(a % 7)是以7为周期在循环,而且数对(a % 4, a % 7)在这个[0,21]之间并没有出现重复,也就是说由(a % 4, a % 7)可以确定a的值

    如果n个数互质,且乘积为P,有一个未知数M,已知M分别除以n个数的余数,那个在0<M<P的范围内,可以确定唯一的M值。

    二。

    13 * 77 = 1001 => 1001 % 1000 = 1

    => 1001 ≡ 1 (mod 1000)

    => a * 1001 ≡ a (mod 1000)

    就是说任何数乘以1001除以1000得到余数是本身。因此:

    (a * 1001) % 1000 = (a * 13 * 77) % 1000 = ((a * 13) % 1000) * 77) % 1000

     

    理解一下就能发现,我们并不需要知道a * 13的积是多少,而是知道它除以1000的余数就行了,因为反正最后都是要模1000,那事先拿一部分来模1000并不影响结果。

    除法类似,两个数乘积除以另一个数,那事先用一个乘数除以除数,得到的值再乘以另一个乘数再除,并不影响结果。这个思想,也是RSA用来当被模数过大时优化计算力的算法。

     

    你心想三位数,乘以13,告诉我乘积的后三位数,我就能知道你想的是哪个数!

    假如你想的是233,233*13=3029,所以你告诉我的是029,我只要把29*77=2233,积的后三位数233就是你心想的数。

    这里就有点非对称的影子了,(1000, 13)就是公钥,(1000, 77)就是私钥。

    3.费马小定理

     ☆  p = 

    2- 1 = 3,   2- 1 = 15 = 3×5,   2- 1 = 63 = 3×21,  2- 1 = 255 = 3×85,  210 - 1 = 1023 = 3×341, ...

    费马指数:2, 4, 6, 8, 10, ......

    ☆  p = 

    2- 1 = 15 = 5×3,   2- 1 = 255 = 5×51,   212 - 1 = 4095 = 5×819,   216 - 1 = 65535 = 5×13107, ...

    费马指数:4, 8, 12, 16, ......

    ☆  p = 

    2- 1 = 7 = 7×1,   2- 1 = 63 = 7×9,   2- 1 = 511 = 7×73,   212 - 1 = 4095 = 7×585,  ...

    费马指数:3, 6, 9, 12, ......

    ☆  p = 11 

    210 - 1 = 1023 = 11×93,   220 - 1 = 1048575 = 11×95325,   230 - 1 = 1073741823 = 11×797612893,   ...

    费马指数:10, 20, 30,  ......

    参考:

    https://toutiao.io/posts/u6ehd/preview

    图片:http://introcs.cs.princeton.edu/java/99crypto/

  • 相关阅读:
    用strings命令查看kafka-log内容 过滤二进制编码
    Kafka+Storm+HDFS整合实践
    kafka 在阿里云部署
    oracle中的类似BIN$MrkCYT9eTTK+0sStMwn7+Q==$0的表的作用
    Oracle 分区表的新增、修改、删除、合并。普通表转分区表方法
    ORACLE分区表删除分区数据
    graylog 市场
    三种方法解决 Failed to start LSB: Bring up/down networking 问题
    【项目积累】对JSON数据的处理
    【CTO俱乐部研修班开课】看板先驱David J. Anderson:看板核心在于创造一种能力——提升敏捷性
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/7049377.html
Copyright © 2020-2023  润新知