非对称加密
非对称加密有一对密钥,公钥和私钥。可以用公钥加密,也可以用私钥加密。不过,公钥加密必须用私钥解密,私钥加密必须用公钥解密。如果不对应,则会报这样的异常
javax.crypto.BadPaddingException: Data must start with zero
代码如下
- import java.security.KeyPair;
- import java.security.KeyPairGenerator;
- import javax.crypto.Cipher;
- public class RSA {
- //公钥加密
- public byte[] PublicEncrypt(KeyPair key,String str)throws Exception {
- Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
- cipher.init(Cipher.ENCRYPT_MODE, key.getPublic());
- return cipher.doFinal(str.getBytes("UTF8"));
- }
- //公钥解密
- public byte[] PublicDECRYPT (KeyPair key,byte[] data)throws Exception {
- Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
- cipher.init(Cipher.DECRYPT_MODE, key.getPublic());
- return cipher.doFinal(data);
- }
- //私钥加密
- public byte[] PrivateEncrypt (KeyPair key,String str)throws Exception {
- Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
- cipher.init(Cipher.ENCRYPT_MODE, key.getPrivate());
- return cipher.doFinal(str.getBytes("UTF8"));
- }
- //私钥解密
- public byte[] PrivateDECRYPT(KeyPair key,byte[] data)throws Exception {
- Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
- cipher.init(Cipher.DECRYPT_MODE, key.getPrivate());
- return cipher.doFinal(data);
- }
- public static void main(String args[]) throws Exception {
- String str = "Hello World!";
- KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
- keyGen.initialize(1024);
- KeyPair key = keyGen.generateKeyPair();
- test1 t = new test1();
- System.out.println("加密前原文:"+str);
- byte[] data = t.PublicEncrypt(key,str);
- System.out.println("私钥解密后:"+new String(t.PrivateDECRYPT(key,data)));
- byte[] data1 = t.PrivateEncrypt(key,str);
- System.out.println("公钥解密后:"+new String(t.PublicDECRYPT(key,data1)));
- }
- }
相关推荐
Java实现的RSA加密解密算法示例 本文主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了Java RSA加密解密算法的相关实现技巧。 知识点1:RSA加密解密算法简介 RSA加密解密算法是一种非对称加密算法,由Ron...
"C# RSA加密与JAVA解密,实现相互通信"的主题聚焦于如何利用RSA公钥/私钥加密算法在C#和Java两个不同的编程环境中实现安全的数据交换。RSA是一种非对称加密算法,它使用一对密钥——公钥和私钥,公钥用于加密,私钥...
这些文件可以帮助读者深入理解RSA加密解密的Java实现,并提供实际操作的参考。 总结来说,RSA加密解密是网络安全中的关键技术,Java提供了丰富的API支持其应用。通过生成密钥对,使用公钥加密和私钥解密,我们可以...
### RSA加解密算法Java实现解析 #### 一、引言 RSA算法是一种非对称加密算法,在现代信息安全领域有着广泛的应用。它基于大整数分解的数学难题,确保了其安全性。本文将通过分析提供的Java代码来深入了解RSA算法的...
在Java中实现RSA加解密,主要涉及到Java的`java.security`和`javax.crypto`这两个包。首先,我们需要生成一对公钥和私钥,这通常通过`KeyPairGenerator`类来完成。以下是一段创建RSA密钥对的示例代码: ```java ...
在Java中实现RSA加密解密,可以帮助开发者保护敏感信息,例如在网络传输过程中防止数据被窃取。 首先,了解RSA的工作原理至关重要。它基于两个大素数的乘积,生成一对密钥:公钥和私钥。公钥可以公开,用于加密信息...
在Java中,`java.security`和`javax.crypto`包提供了必要的接口和类来实现RSA加解密。例如,`KeyPairGenerator`用于生成公钥和私钥对,`Cipher`用于进行加解密操作。 在描述中提到的"解决长度限制",这是因为在RSA...
由于Java的RSA加解密一般都是用RSA/ECB/PKCS1PADDING,导致Python一般的RSA加密库的加解密结果与Java的不兼容,Python下目前能与之兼容的RSA的库目前发现的只有一个,就是m2crypto。 这个库目前的问题是在windows...
使用RSA非对称加密完成Java后端RSA加密和分段加解密,最近研究了RSA非对称加密,关于什么是RSA,网上各种文章一搜一大把,由于RSA的特性,一个1024位的密钥只能加密117位...下面就给出如何完成后端RSA加解密和分段加解密
在Java中,我们可以使用Java Cryptography Extension (JCE)库来实现RSA的加密和解密操作。 首先,我们需要了解RSA的基本概念。RSA算法包含两个密钥:公钥和私钥。公钥可以公开给任何人,用于加密数据;而私钥必须...
在给定的“java_RSA2048加密解密.zip”压缩包中,包含了前后端实现RSA2048加密解密的示例代码,使得开发者可以轻松地将这种安全机制集成到自己的项目中。 首先,我们需要理解RSA算法的基本原理。RSA(Rivest–...
Java实现RSA加解密工具类Demo是一个典型的非对称加密技术的应用示例,RSA是一种广泛使用的公开密钥加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出。它基于大数因子分解的困难性,提供了安全的...
Java OpenSSL生成的RSA公私钥进行数据加解密详细介绍 项目: JAVA生成的RSA的密文,通过C++来解密。 RSA这里就不多介绍了大家自己去看。 JAVA也是通过包来实现加密和解密的,那么我的C++是通过OPENSSL的库来实现的...
java rsa 加解密 包含界面,随机生成密钥
* RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。 * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。 * RSA加密解密:私钥...
### RSA加密算法实现以及C#与Java互通加解密 #### 一、RSA算法简介 RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir 和 Leonard Adleman 在1977年提出,并以其三人的名字首字母命名。RSA算法的安全性基于...
在这个案例中,"Test"和"Javaworkspace"可能是包含代码示例或者测试数据的文件夹,可能包含C#和Java的实现代码,用于演示如何处理上述步骤,以实现RSA加密解密和签名验签的互通。 在实际应用中,还需要考虑其他因素...
在实现跨语言的RSA加解密时,还需要考虑字符编码和字节流的处理。加密和解密的数据通常以字节序列形式存在,而C#和Java在处理字符串时可能有不同的默认编码,如UTF-8或ASCII。确保在加密前正确地将字符串转换为字节...
在PHP中,我们可以使用openssl扩展来实现RSA加解密。例如,`openssl_pkey_new()`函数用于生成密钥对,`openssl_public_encrypt()`和`openssl_private_decrypt()`分别用于加密和解密数据。而在Java中,我们可以利用`...
微信小程序RSA加解密是一种在小程序开发中实现数据安全传输的技术。RSA,即Rivest-Shamir-Adleman,是一种非对称加密算法,它基于大整数因子分解的困难性,提供了数据加密和数字签名的服务。在微信小程序中,由于其...