zoukankan      html  css  js  c++  java
  • 公开密钥机制 算法及公式 例子 转

    Domino的安全机制中用到了公开密钥机制。请你用5分钟的时间看看我这个帖子,你就会明白公开密钥机制的原理和使用方法。

    几个小数数学中的概念:
    1、自然数(natural number),用以计量事物的件数或表示事物次序的数。即用数码0,1,2,3,4,……所表示的数 。自然数由0开始 , 一个接一个,组成一个无穷集合。
    2、一整数被另一整数整除,后者即是前者的因数,如1,2,4都为8的因数。1,2,4被称为8的因子。
    3、在两个或几个数中,如果它们有相同的因数,那么这个/些因数就叫做它们的公因数。而这些公因数中最大的那个称为这些正整数的最大公因数。12和18的公因数有:1、2、3、6,而最大公因数就是6了!
    4、质数,又称素数,就是一个正整数,除了本身和 1 以外并没有任何其他因子。例如 2,3,5,7 是质数,而 4,6,8,9 则不是,后者称为合成数。
    5、互素,又称互质。若n个整数a1,a2,…,an的最大公因数为1,就称这n个整数互素。
    ============================================


    1、找密钥的过程
    在自然数中找两个大质数p和q,记n=pq,m=(p-1)(q-1)。
    在0至m-1的自然数中找一个e,但e要满足1个条件:e与m互素。
    再找一个数d,d要满足的条件是:ed-1除以m的余数是0(即ed-1能够被m除尽)。
    那么,数字对(e,n)就是公开密钥,数字对(d,n)就是私有密钥。

    2、用公开密钥机制加解密的算法公式
    注意:在使用公开密钥加密时,明文分组的值要小于n。
    假设明文的值是x,密文的值是y。则:
    加密公式:密文y=x的e次方除以n的余数
    解密公式:明文x=y的d次方除以n的余数

    至于这两个公式是怎么成立的,你不用去管,自然是有大数学家证明过的。数学是自然科学的基础,这句话没错吧!

    3、举例
    (1)找两个大质数p和q,假设为:p=7,q=17;
    n=7*17=119;
    m=(7-1)(17-1)=96
    (2)从0至m-1(即0至95)的自然数中找一个e,但e要与96互素。我们就找e=5;
    (3)现在再找d,使5d-1能够被96除尽。可以从1往大的数推算,可找到d=77。
    因为5*77-1=384,384/96=4,余数是0。

    好了,公开密钥就是(5,119),私有密钥就是(77,119)。
    注意:77这个数很关键呀,不能告诉任何人。

    (你看它多放肆,它就料定你从5推算不出77来!其根本原因就是把119分解成两个质数的乘积很困难。不过这儿还是不困难,因为119太小了)。

    (4)加解密的过程。
    在使用公开密钥加密时,明文分组的值要小于n。
    在本例中,n=119,由于2的7次方等于128,所以使用本例密钥加密时,明文数据只能按照6位(bit)分组。2的6次方等于64。

    假设明文的某个分组的值是8,即x=8。
    加密后的密文y=x的e次方除以n的余数=8的5次方除以96的余数=32768/96的余数=32,所以密文y=32。

    得到密文值是32的人,使用私有密钥解密:
    解密后的明文x=y的d次方除以n的余数=32的77次方除以96的余数=8


    五分钟不到,你就明白了公开密钥机制和使用方法了吧。

    OK,发挥自己的想象力,去使用公开密钥机制吧。

  • 相关阅读:
    python json 和 pickle的补充 hashlib configparser logging
    go 流程语句 if goto for swich
    go array slice map make new操作
    go 基础
    块级元素 行内元素 空元素
    咽炎就医用药(慢性肥厚性咽炎)
    春季感冒是风寒还是风热(转的文章)
    秋季感冒 咳嗽 怎么选药
    解决IE浏览器“无法显示此网页”的问题
    常用的 css 样式 记录
  • 原文地址:https://www.cnblogs.com/kevinge/p/2577488.html
Copyright © 2011-2022 走看看