`
234390216
  • 浏览: 10218799 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462016
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1774438
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1397510
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:394706
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679510
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530299
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1180704
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:466037
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151030
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:67735
社区版块
存档分类
最新评论

RSA算法加解密示例

阅读更多

RSA加密与解密

RSA算法的密钥由公钥和私钥组成,公钥用于加密,私钥用于解密。顾名思义,公钥就是可以进行公开的密钥,一般可以公开给你的合作伙伴;私钥就是私有的,也就是只有你知道的,你的合作伙伴通过你提供的公钥进行加密的内容只有你能进行解密,这样也就只有你知道他发的是什么内容。用于加密的公钥和私钥是配对的。这样的一对密钥在Java中由java.security.KeyPairGenerator来产生。以下是一个生成密钥对的示例,该示例中还将生成的密钥对分别保存到了文件中。

	private static final String ALGORITHM = "RSA";
	private static final String PRIVATE_KEY_PATH = "D:\\rsa_private.isa";
	private static final String PUBLIC_KEY_PATH = "D:\\rsa_public.isa";
	
	/**
	 * 生成公钥和私钥并存储到文件中
	 * @throws Exception
	 */
	@Test
	public void geneKeyPair() throws Exception {
		KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(ALGORITHM);
		keyPairGenerator.initialize(1024);
		KeyPair keyPair = keyPairGenerator.generateKeyPair();
		PrivateKey privateKey = keyPair.getPrivate();//私钥
		PublicKey publicKey = keyPair.getPublic();//公钥
		byte[] privateKeyBytes = privateKey.getEncoded();//私钥对应的字节数组
		byte[] publicKeyBytes = publicKey.getEncoded();//公钥对应的字节数组
		Files.write(Paths.get(PRIVATE_KEY_PATH), privateKeyBytes);
		Files.write(Paths.get(PUBLIC_KEY_PATH), publicKeyBytes);
	}

加密

加密的过程跟使用AES算法进行加密的过程类似,唯一需要注意的是使用存储起来的公钥时需要使用X509EncodedKeySpec进行封装,然后通过KeyFactory.generatePublic(KeySpec)进行生成。

	@Test
	public void testEncrypt() throws Exception {
		this.encrypt("Hello RSA");
	}
	
	/**
	 * 公钥加密
	 * @param value
	 * @return
	 * @throws Exception
	 */
	private byte[] encrypt(String value) throws Exception {
		Cipher cipher = Cipher.getInstance(ALGORITHM);
		//读取公钥对应的字节数组
		byte[] publicKeyCode = Files.readAllBytes(Paths.get(PUBLIC_KEY_PATH));
		//构造公钥,存储起来的公钥需要使用X509EncodedKeySpec进行读取
		X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyCode);
		KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
		//根据已有的KeySpec生成对应的公钥
		PublicKey publicKey = keyFactory.generatePublic(keySpec);
		cipher.init(Cipher.ENCRYPT_MODE, publicKey);
		byte[] result = cipher.doFinal(value.getBytes());
		System.out.println(Base64.getEncoder().encodeToString(result));
		return result;
	}

解密

解密是使用的密钥对中的私钥,其使用方法跟AES算法进行解密类似。 存储起来的私钥需要通过PKCS8EncodedKeySpec加载,然后通过KeyFactory.generatePrivate(KeySpec)生成私钥。

	/**
	 * 私钥解密
	 * @throws Exception
	 */
	@Test
	public void testDecrypt() throws Exception {
		Cipher cipher = Cipher.getInstance(ALGORITHM);
		byte[] privateKeyCode = Files.readAllBytes(Paths.get(PRIVATE_KEY_PATH));
		//私钥需要通过PKCS8EncodedKeySpec来读取
		PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyCode);
		KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
		//生成私钥
		PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
		cipher.init(Cipher.DECRYPT_MODE, privateKey);
		String content = "Java Program";
		byte[] input = this.encrypt("Java Program");
		byte[] result = cipher.doFinal(input);
		Assert.assertTrue(content.equals(new String(result)));
	}

(本文由Elim写于2017年5月22日)

1
1
分享到:
评论

相关推荐

    Java实现的RSA加密解密算法示例

    RSA算法基于大数分解难题的原理,使用公钥加密、私钥解密的方式实现信息的加密和解密。 知识点2:Java中RSA加密解密算法的实现 在Java中,可以使用Java Cryptography Architecture(JCA)来实现RSA加密解密算法。...

    java Rsa 加解密示例

    `java Rsa 加解密示例.html`和`java Rsa 加解密示例_files`可能是包含该示例代码和相关资源的文件,建议打开查看以获取实际操作的指导。通过这些文件,你可以学习如何将理论知识转化为实际代码,进一步巩固对RSA加...

    RSA加密解密示例工程

    总之,RSA加密解密示例工程提供了一个实践平台,让开发者可以动手学习如何在Android环境中利用RSA算法保护数据安全。通过这个示例,可以提升对非对称加密的理解,增强实际开发中的安全意识和技能。

    RSA文件加解密(C#源代码)

    本示例是用C#语言实现的,利用RSA算法进行文件的加密和解密操作。RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出,因其发明者的名字首字母命名。 首先,了解RSA的基本原理:RSA...

    PHP_JAVA_RSA互通加解密

    本项目"PHP_JAVA_RSA互通加解密"实现了PHP和Java之间使用RSA算法进行数据的加解密操作,确保了跨平台、跨语言的数据安全通信。 首先,RSA(Rivest-Shamir-Adleman)加密算法基于数论中的大数因子分解问题,它的核心...

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

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

    java_RSA2048加密解密.zip

    首先,我们需要理解RSA算法的基本原理。RSA(Rivest–Shamir–Adleman)是一种非对称加密算法,它依赖于两个密钥:公钥和私钥。公钥是可以公开的,用于加密数据;而私钥是保密的,用于解密数据。由于数学上的复杂性...

    Delphi RSA加解密【支持RSA公钥加密私钥解密,RSA私钥加密公钥解密,秘钥格式支持PKCS8和PKCS1】D7~XE10可用

    在IT领域,特别是软件开发中,安全通信是至关重要的,而RSA算法是广泛使用的非对称加密技术之一。本文将详细讲解Delphi环境下如何实现RSA加解密,并着重讨论其支持的公钥加密私钥解密以及私钥加密公钥解密的功能,...

    RSA.rar_RSA 算法_rsa_rsa加密解密_rsa算法模拟

    "www.pudn.com.txt"可能是提供了一些关于RSA算法的额外资料或示例,而"RSA加密解密"可能是程序代码文件,包含了一个实现RSA加密解密功能的示例程序。通过阅读这些文件,你可以深入了解RSA算法的实现细节,并可以动手...

    C#非对称加密_RSA加解密示例.rar

    本示例主要探讨了如何在C#环境中使用RSA算法进行加解密操作。 RSA(Rivest–Shamir–Adleman)是一种广泛使用的非对称加密算法,它基于大素数因子分解的难度。RSA的核心在于一对公钥和私钥:公钥用于加密,而私钥...

    C语言中的 RSA加密和解密算法-_RSA加解密算法的演示,C语言实现

    - `main.c`: 示例程序,展示了如何使用RSA库进行加解密操作。 - 可能还有其他辅助文件,如`Makefile`用于构建项目,或者测试数据文件。 为了实际运行和理解这些代码,你需要具备一定的C语言基础和对数论知识的理解...

    RSA加密算法实现以及C#与java互通加解密

    为了实现C#与Java之间的互通加解密,需要确保两边使用的RSA算法实现一致,包括密钥生成、填充算法及加密解密的具体实现。 - **密钥一致性**:确保C#与Java生成的公私钥对相同。 - **填充算法一致性**:两边都应采用...

    RSA.zip_RSA CSharp _RSA算法实例_RSA解密_rsa_rsa加密解密

    下面将详细介绍RSA算法的基本原理、C#中的实现方式以及如何进行加密解密操作。 **RSA算法基础** RSA(Rivest-Shamir-Adleman)算法是1977年由Ron Rivest、Adi Shamir和Leonard Adleman提出的。它基于大数因子分解...

    RSA算法JAVA公钥加密,C#私钥解密

    RSA算法是一种非对称加密技术,它在信息安全领域扮演着重要的角色。非对称加密与对称加密的主要区别在于,它使用两个不同的密钥:一个公钥用于加密,另一个私钥用于解密。RSA的名字来源于它的发明者Ron Rivest、Adi ...

    C# .net版 RSA 公钥加密私钥解密 私钥加密公钥解密

    在给出的链接中(https://blog.csdn.net/qq_37835111/article/details/87358779),作者提供了一个具体的示例,演示了如何在C# .NET环境下实现RSA加解密。压缩包文件"RSATool"可能包含了一些辅助工具或者示例代码,...

    RSA加解密的JAVA实现

    RSA算法是一种广泛应用于网络安全的非对称加密技术,它的全称是Rivest-Shamir-Adleman,由三位美国数学家Rivest、Shamir和Adleman在1977年提出。非对称加密算法与对称加密算法不同,它拥有两个密钥:公钥和私钥。...

    Rsa加密解密.rar_RSA 加密解密_java rsa_rsa加密_rsa加密java_加密 解密

    RSA加密解密是一种广泛应用于网络安全领域的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家在1977年提出,因此得名RSA。这种算法基于大整数因子分解的困难性,使得只有持有正确密钥的人才能...

    RSA.rar_VS2010 RSA算法_rsa_rsa加解密

    在"RSA.rar_VS2010 RSA算法_rsa_rsa加解密"这个压缩包中,可能包含了使用VS2010实现RSA加解密的源代码示例,这可以帮助开发者理解和学习如何在实际项目中应用RSA算法。通过阅读和分析这些代码,可以深入理解RSA的...

    RSA加密解密.rar

    这些文件可能包括密钥生成、加解密函数的实现,以及如何在实际项目中集成这些功能的示例。通过学习和理解这些代码,开发者可以更好地掌握RSA加密解密技术,并将其应用到自己的项目中。 总的来说,RSA加密解密是网络...

    Java实现基于RSA算法的非对称分段式双向加解密的数据接口安全认证源码分享.rar

    Java实现基于RSA算法的非对称分段式双向加解密的数据接口安全认证是一个重要的信息安全技术,主要应用于网络通信中的数据安全传输。RSA算法是一种公开密钥加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在...

Global site tag (gtag.js) - Google Analytics