RSA加密算法

RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。

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

RSA加密算法_第1张图片
图片实例

1. 基本含义

RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。

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

2. RSA算法

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

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

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

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

(n,e1),(n,e2)就是密钥对。其中(n,e1)为公钥,(n,e2)为私钥。[1]

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

e1和e2可以互换使用,即:

A=B^e1 mod n;B=A^e2 mod n;

3. Java实现

//例子为算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;

}

}

}

RSA加密算法_第2张图片
实例

你可能感兴趣的:(RSA加密算法)