`
woming66
  • 浏览: 57550 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

RSA算法

阅读更多
package com.zzq.rsa;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;

public class RSAUtil {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		String s = "zhuzhiqiang"; 
		createPublicPrivateKey();
		encryption(s);
		decrypt();
	}

	public static void createPublicPrivateKey() {
		
		try {
			KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
			kpg.initialize(1024);
			KeyPair kp = kpg.genKeyPair();
			
			PublicKey pbKey = kp.getPublic();
			PrivateKey prKey = kp.getPrivate();
			
			ObjectOutputStream oos1 = new ObjectOutputStream(new FileOutputStream("RSA_pub_key.dat"));
			ObjectOutputStream oos2 = new ObjectOutputStream(new FileOutputStream("RSA_pri_key.dat"));
			
			oos1.writeObject(pbKey);
			oos2.writeObject(prKey);
			
			oos1.close();
			oos2.close();
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException("生成钥匙失败!");
		}
	}
	
	public static void encryption(String content) {
		
		try {
			ObjectInputStream ois = new ObjectInputStream(new FileInputStream("RSA_pub_key.dat"));
			RSAPublicKey pbk = (RSAPublicKey)ois.readObject();
			BigInteger e = pbk.getPublicExponent();
			BigInteger n = pbk.getModulus();
			
			System.out.println("e=" + e);
			System.out.println("n=" + n);
			
			byte[] text = content.getBytes("UTF-8");
//			System.out.println("text" + text.toString());
			
			BigInteger m = new BigInteger(text);
			System.out.println("text=" + m);
			
			BigInteger c = m.modPow(e, n);
			
			System.out.println("c=" + c);
			
			String s = c.toString();
			
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("enc_rsa.dat")));
			bw.write(s, 0, s.length());
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException("加密失败!");
		}
	}
	
	public static void decrypt() {
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("enc_rsa.dat")));
			
			String text = br.readLine();
			
			BigInteger c = new BigInteger(text);
			br.close();
			
			ObjectInputStream ois = new ObjectInputStream(new FileInputStream("RSA_pri_key.dat"));
			
			RSAPrivateKey prk = (RSAPrivateKey)ois.readObject();
			ois.close();
			BigInteger d = prk.getPrivateExponent();
			BigInteger n = prk.getModulus();
			
			System.out.println("d=" + d);
			System.out.println("n=" + n);
			
			BigInteger m = c.modPow(d, n);
			
			System.out.println("m=" + m);
			
			byte[] mt = m.toByteArray();
			
			System.out.println(new String(mt, "UTF-8"));
			
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException("解密失败!");
		}
	}
}
分享到:
评论

相关推荐

    RSA算法演示RSA算法演示

    RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。这种算法在信息安全领域有着广泛的应用,如数字签名、数据加密和密钥交换等。在本演示中,我们将深入探讨RSA...

    VC++实现RSA算法

    RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因其发明者的名字首字母而得名。在VC++中实现RSA算法需要理解其核心原理,包括大整数运算、素数检测、欧拉函数以及模逆运算...

    RSA算法演示.rar

    RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,是目前最广泛使用的公钥加密算法。它结合了大整数因子分解的数学难题,为数据传输提供了强大的安全保护。在此RAR压缩包中,...

    RSA算法工具 RSA算法

    RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。这种算法在信息安全领域扮演着重要角色,广泛应用于数据加密、数字签名和密钥交换等领域。 在RSA算法中,主要...

    RSA实现算法报告关于RSA算法的实现代码

    ### RSA算法实现报告 #### 实验环境 - **硬件配置**:处理器:Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz (4CPUs), ~2.4GHz;内存:2048MB RAM - **软件工具**: - 操作系统:Windows 7 旗舰版 - 开发工具:...

    RSA算法加解密

    RSA算法加解密 RSA算法是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和 Leonard Adleman。但RSA 的安全性一直未能得到...

    RSA.rar_RSA算法_寻找大素数 rsa_数论算法_简单数论

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

    RSA算法的纯Python实现(源码)

    RSA算法的纯Python实现,压缩包内共4个文件,分别是 1、大整数的运算库(当然不是算加减乘除的,这个python本身就有)。这个库是计算乘模运算,幂模运算(蒙哥马利算法),最大公约数算法及扩展最大公约数算法(扩展...

    RSA算法的C实现

    RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,是现代密码学的基石之一。它的主要特点是使用一对密钥,即公钥和私钥,来进行加密和解密。在C语言中实现RSA算法需要理解其...

    密码学RSA算法实现代码

    RSA算法是一种非对称加密算法,它在信息安全领域扮演着重要的角色,特别是在数据加密和数字签名方面。由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。这个算法基于两个数学难题:大整数因子...

    RSA算法实验报告 通过对RSA算法的实现,深入了解RSA原理及应用

    RSA算法是一种非对称加密算法,它在信息安全领域扮演着重要的角色,特别是在数据加密和数字签名方面。由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,RSA的名字就是他们三人姓氏的首字母组合。 实验目的...

    rsa.rar_RSA  C语言_RSA算法C++_RSA解密 C语言_rsa

    RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。这种算法基于大整数因子分解的困难性,是现代密码学的基石之一。在C语言中实现RSA算法,可以帮助我们理解其...

    读硬盘序列号和加密RSA算法.rar

    在提供的压缩文件"20073132040295"中,可能包含了一个实现读取硬盘序列号的程序或脚本,以及一个使用RSA算法加密或解密的示例代码。通过学习这些内容,开发者可以更好地理解和掌握这两个重要的IT概念,并在实际项目...

    Delphi中的经典RSA算法源码示例

    **Delphi中的经典RSA算法源码示例** RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于信息安全领域,包括数据加密、数字签名等。在Delphi编程环境中,理解并实现RSA算法对于开发安全相关的应用至关...

    使用Qt实现简化版的RSA算法

    RSA算法是一种著名的非对称加密技术,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它基于大整数因子分解的困难性,使得只有拥有正确密钥的人才能解密信息。在本文中,我们将深入探讨如何...

    基于RSA算法的数字签名系统 C#实现

    这里我们聚焦于一个基于RSA算法的数字签名系统,该系统已用C#编程语言实现。RSA算法是公钥密码学中的基石,而数字签名则是其在确保网络安全中的应用之一。 RSA算法是由Ron Rivest、Adi Shamir和Leonard Adleman三位...

    RSA算法试验报告

    ### RSA算法试验报告知识点概述 #### 一、引言与背景 随着信息技术的快速发展和互联网应用的日益广泛,数据安全和个人隐私保护变得尤为重要。在这一背景下,加密技术成为了确保信息在网络上传输过程中不被非法窃取...

    实验二(第4章 使用RSA算法自动分配密钥的聊天程序 )1

    第四章的实验主要聚焦在基于RSA算法的加密聊天程序上,这是非对称加密技术的一种典型应用。RSA算法,以其三位发明者Ron Rivest、Adi Shamir和Leonard Adleman的名字首字母命名,是一种公钥加密算法,它利用大整数...

    PKCS#1 RSA 算法标准.doc

    PKCS(Public-Key Cryptography Standards)是由RSA安全公司制定的一系列标准,其中PKCS#1是关于RSA算法的标准,详细定义了RSA算法的使用方式和数据格式。 在PKCS#1 v2.1版本中,主要涵盖了RSA算法的实现细节,包括...

    一种基于DES和RSA算法的混合密码系统.docx

    加密时把明文分成块,块的大小可变,但不能超过密钥的长度,RSA算法把每一块明文转化为与密钥长度相同的密文块。RSA算法利用了陷门单向函数的一种可逆模指数运算。 本文提出的混合密码系统,通过结合DES算法和RSA...

Global site tag (gtag.js) - Google Analytics