zoukankan      html  css  js  c++  java
  • RSA其实很简单

    RSA其实很简单:
    1. 选两个大素数p, q
    2. 计算n=pq
    3. 选取e,使得e与(p-1)(q-1)互素
    4. 计算d=e^(-1)mod((p-1)(q-1))
    n, e就是RSA的公钥,需要告诉每一个可能像你发送加密信息的人,
    d就是私钥,只有你能知道。
    但别人要想你发送信息m时,需要使用加密算法将明文m变成秘文c
    c=m^(e) (mod n)
    你收到秘文c后,使用解密算法变回明文m
    m=c^(d) (mod n)

    抄一个例子:
    取:p=47 q=71
    那么:n=pq=3337  (p-1)(q-1)=3220
    取:e=79
    那么:d=79^(-1) mod 3220 = 1019
    加密明文m=688
    c=688^(79) (mod 3337) = 1570
    解密密文c=1570
    m=1570^(1019) (mod 3337) = 688

    就这么简单。不过为了足够安全,要求p, q都很大,一般至少要512bit,
    这样生成的RSA密钥是1024bit。

    可是如果你希望把它做成注册码算法,你肯定要把n, e, d都放到程序里去,
    这样和普通的对称密钥算法没有任何区别。

    这一段程序是为了选p, q和e的。这几个数字一般都是随机产生,然后
    验证是否合法的。


    e其实可以固定为65537,对加密效果没有影响

    正像你看到的,RSA的密钥不是你随便挑的,是要从p, q两个大素数
    计算得到的,p, q两个数在计算得到密钥后必须严格保密,最好丢弃。
    RSA的安全性是基于大数分解的难度,也就是说从n要逆向得到p, q在目
    前是没有什么好方法的,超过了目前计算机所拥有的计算能力。
    一旦大数分解这个问题得到解决,RSA也就失去了存在的意义。

  • 相关阅读:
    java陷阱一箩筐面试
    应用MVC设计模式解决J2ME应用程序导航问题 mingjava
    我怎么了
    运营商掘宝手机游戏 无限“钱途”引人竞折腰
    网络工程师考试大纲
    java 正则
    java集合使用——LinkedList
    java集合使用——HashMap
    java集合使用——HashSet
    JAVA集合使用——基本概念
  • 原文地址:https://www.cnblogs.com/adylee/p/1488840.html
Copyright © 2011-2022 走看看