JAVA RSA算法加密实现 eclipse

RSA算法加密实现

一、实验目的
学习经典的RSA公钥加密算法的基本原理和特点,能够编写简单的代码实现RSA公钥加密和私钥解密的过程。
二、实验要求
1. 熟悉RSA公私钥加密算法。
2. 掌握如何使用Java BigInteger类,简单实现教科书式的RSA公私钥加密算法。
3. 了解JDK提供的RSA算法的使用。
三、开发环境
JDK 1.7以上,Java开发环境(本实验采用Windows + eclipse作为实验环境),要求参与实验的同学按照对称加密提供的方法,提前安装好JDK。
四、实验内容
【1-1】RSA算法的实现
1、实现RSA公私钥生成算法。
根据教科书可知,RSA的公钥为 ,私钥为 。其中 且 为两个大素数。 且 。因此,可先选取两个大素数,并根据上述关系选取公私钥。相关代码如下:

import java.math.BigInteger;
import java.util.Random;

public class RSAInstance {
	BigInteger n;
	BigInteger e;
	BigInteger d;
	
	public void initKeys() {
		// 随机选取两个大素数p,q 长度大致在1024位,置信度1-(1/2)^(500)
		BigInteger p = new BigInteger(1024, 500, new Random());
		BigInteger q = new BigInteger(1024, 500, new Random());
		
		// 强制要求p q不等,否则会遭受开平方攻击
		assert(p.compareTo(q) != 0);
		
		// 计算n和欧拉函数(n)
		n = p.multiply(q);
		BigInteger fin = (p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE)));
		
		// 随机选取e 同时计算d
		// 为了保证一定互素,我们直接选一个素数e
		e = new BigInteger(512, 500, new Random());
		d = e.modInverse(fin);
		
		// 输出结果
		System.out.println("n : " + n);
		System.out.println("e : " + e);
		System.out.println("d : " + d);
		
		return;
	}
	
}

【1-2】RSA算法的完整参考代码

import java.math.BigInteger;
import java.util.Random;


public class RSAInstance {
	BigInteger n;
	BigInteger e;
	BigInteger d;
	
	public void initKeys() {
		// 随机选取两个大素数p,q 长度大致在1024位,素数置信度1-(1/2)^(500)
		BigInteger p = new BigInteger(1024, 500, new Random());
		BigInteger q = new BigInteger(1024, 500, new Random());
		
		// 强制要求p q不等,否则会遭受开平方攻击
		assert(p.compareTo(q) != 0);
		
		// 计算n和欧拉函数(n)
		n = p.multiply(q);
		BigInteger fin = (p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE)));
		
		// 随机选取e<fin且和fin互素, 同时计算d
		// 为了保证一定互素,我们直接选一个素数e
		e = new BigInteger(512, 500, new Random());
		d = e.modInverse(fin);
		
		// 输出结果
		System.out.println("n : " + n);
		System.out.println("e : " + e);
		System.out.println("d : " + d);
		
		return;
	}
	
	// 加密算法
	public BigInteger encrypt(BigInteger m) {
		return m.modPow(e, n);
	}
	
	// 解密算法
	public BigInteger decrypt(BigInteger c) {
		return c.modPow(d, n);
	}
	
	// Main方法,测试RSA对的加密和解密
	public static void main(String args[]) {
		// 创建RSA算法实例,生成公私钥对
		RSAInstance rsa = new RSAInstance();
		rsa.initKeys();
		
		// 加密消息m, 其中m = 12345678 
		BigInteger m = new BigInteger("12345678");
		BigInteger c = rsa.encrypt(m);
		System.out.println("E(12345678)    = " + c);		
		// 解密
		System.out.println("D(E(12345678)) = " + rsa.decrypt(c));
	}
	
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RSA 加解密 签名 java eclipse 工程直接运行; eclipse中,右击工程的那个文件夹,选择最下边的属性“properties”然后点击左侧的"java build path"然后选择Libraries标签,最后点击 add external JARs 选择 javabase64-1.3.1 公钥: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOQfwHN+cMq86BJiQ9kdhF69JbbvUUIdG7k29kRjhf18/i20kXL0sx61EzDFLEEcGIvcWOBpXb9B3fwfp3oHGjrI5NYAas09OfrMCRSBHs7q2io4WL8Ljp+Gqcwg3DoGSyQ9K0HwnkGzTdTlDgQdeBFZ8+HejciA/D/7BD/xx0ZQIDAQAB 私钥: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM5B/Ac35wyrzoEmJD2R2EXr0ltu9RQh0buTb2RGOF/Xz+LbSRcvSzHrUTMMUsQRwYi9xY4Gldv0Hd/B+negcaOsjk1gBqzT05+swJFIEezuraKjhYvwuOn4apzCDcOgZLJD0rQfCeQbNN1OUOBB14EVnz4d6NyID8P/sEP/HHRlAgMBAAECgYEAyGQxce3tTFFL5Axjn3Iodt6EVRM7h2DIPX8j9X+H3A54SocUvzLS0uA21ur9KsO5jZoa6z8YsEfAEpqLN1iprkYPAluzgxi+GEIXMqMUZMRrdb3UzqwMIh70fI0/75oDRuUvpgHP5EodGe1WRujdnTlVbiGawZlsqqx1VdsG+kECQQDsrVgVQObQufFrlkugNIFqmDb/RMsEhgCtwlMdAzGOlmLyQYZa/LS94gNcrjLubuIWEZ0YuLwv0XDoVwmsv/lVAkEA3xjctScRQWr/A7J+QXxXMFfIbCj/iw4oqb6p+lrxG3rU6U3gzYETpZt+jRnZVYeH2SJjHq7Fyg9XEi+mbsJO0QJAYhaBT+WjA1RcysLyOsYn8J5/BJJlNU24EEteGMMPEdIf1dj0LtdWrO9zh0Cm2QxZZN4N5oYBcCv0CEayOschNQJAOPjAZAJ2BZ6tQOR0GYUHPvEr3XMazwfummp2Pdi7eakEdg/NOK2dtszepGnVdmIF7w05ArzfBZqlQZ+pgN9eAQJBAKyIegHWUERe/x2PXx0nFaxrsHjeysIoEGO9T4szLjkH77F+zfNA75zGY2pvmyPkSW1wxhMHS+GpVD11jKc6lDA= 公钥加密——私钥解密 加密前文字: 这是一行没有任何意义的文字,你看完了等于没看,不是吗? 加密后文字: 蘌潋?tM??瞗Mt?U

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值