zoukankan      html  css  js  c++  java
  • RSA算法原理

      (基本来自百度百科)

      RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
    RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。


      RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。


      在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。


      RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。

    RSA算法涉及三个参数,n、e1、e2 。

    其中,n是两个大素数p、q的乘积,n的二进制表示时所占用的位数,就是所谓的密钥长度。

    e1和e2是一对相关的值,e1可以任意取,但要求e1 与 (p-1) * (q-1) 互质;再选则e2,要求(e2 * e1) % ( (p-1) * (q-1) ) = 1 。

    (n,e1) ,(n,e2) 都是密钥对。其中(n,e1)为公钥,(n,e2)为私钥。

    RSA加解密的算法完全相同,设A为明文,B为密文,则,A = B^e2 mod n; B = A^e2 mod n;公钥加密体制中,一般用公钥加密,私钥解密。

    e1和e2可以互换使用。

    //例子为算47 * x + 30 * y ==1 的解
    public class Exercise
    {
        public static void main(String[] args)
        {
            int[] p = new int[2];
            int a = 47;
            int b = 30;
            RSA(a,b,p);
            System.out.print("p[0] is: " + p[0] + ";p[1] is:" + p[1]);//p1为私钥
        }
        public static  int[] RSA(int a,int b,int[] p)//这里假设a > b
        {
            if(a%b == 1)
            {
                p[0] = 1;
                p[1] = -(a - 1) / b;
                return p;
            }
                else
            {
                    RSA(b,a % b,p);
                    int t = p[0];
                    p[0] = p[1];
                    p[1] = t - (a / b) * p[1]; 
                    return p;
            }
        }
    }
  • 相关阅读:
    现代软件工程 第一章 概论 第3题——韩婧
    现代软件工程 第一章 概论 第2题——韩婧
    小组成员邓琨、白文俊、张星星、韩婧
    UVa 10892 LCM的个数 (GCD和LCM 质因数分解)
    UVa 10780 幂和阶乘 求n!中某个因子的个数
    UVa 11859 除法游戏(Nim游戏,质因子)
    Codeforces 703C Chris and Road 二分、思考
    Codeforces 703D Mishka and Interesting sum 树状数组
    hdu 5795 A Simple Nim SG函数(多校)
    hdu 5793 A Boring Question 推公式(多校)
  • 原文地址:https://www.cnblogs.com/wyzs/p/5198291.html
Copyright © 2011-2022 走看看