java 非对称加密算法RSA实现详解
作者:小破孩123 时间:2023-11-25 07:41:36
现在就为大家介绍一种基于因子分解的RSA算法,这种加密算法有两种实现形式:1、公钥加密,私钥解密;2、私钥加密,公钥解密。下面就为大家分析一下实现代码,相对于DH算法,RSA显得有些简单。
初始化密钥:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(512);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPrivateKey rsaprivateKey = (RSAPrivateKey)keyPair.getPrivate();//私有密钥
RSAPublicKey rsapublicKey = (RSAPublicKey)keyPair.getPublic();//公有密钥
System.out.println("privateKey : "+Base64.encodeBase64String(rsaprivateKey.getEncoded()));
System.out.println("publicKey : "+Base64.encodeBase64String(rsapublicKey.getEncoded()));
1、私钥加密,公钥解密:
//私钥加密,公钥解密--加密
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaprivateKey.getEncoded());
KeyFactory privateKeyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = privateKeyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher privateCipher = Cipher.getInstance("RSA");
privateCipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] result = privateCipher.doFinal(src.getBytes());
System.out.println("私钥加密,公钥解密--加密:"+Base64.encodeBase64String(result));
//私钥加密,公钥解密--解密
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsapublicKey.getEncoded());
KeyFactory publicKeyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = publicKeyFactory.generatePublic(x509EncodedKeySpec);
Cipher publicCipher = Cipher.getInstance("RSA");
publicCipher.init(Cipher.DECRYPT_MODE, publicKey);
result = publicCipher.doFinal(result);
System.out.println("私钥加密,公钥解密--解密:"+new String(result));
2、公钥加密,私钥解密:
//公钥加密,私钥解密---加密
x509EncodedKeySpec = new X509EncodedKeySpec(rsapublicKey.getEncoded());
publicKeyFactory = KeyFactory.getInstance("RSA");
publicKey = publicKeyFactory.generatePublic(x509EncodedKeySpec);
publicCipher = Cipher.getInstance("RSA");
publicCipher.init(Cipher.ENCRYPT_MODE, publicKey);
result = publicCipher.doFinal(src.getBytes());
System.out.println("公钥加密,私钥解密---加密:"+Base64.encodeBase64String(result));
//公钥加密,私钥解密---解密
pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaprivateKey.getEncoded());
privateKeyFactory = KeyFactory.getInstance("RSA");
privateKey = privateKeyFactory.generatePrivate(pkcs8EncodedKeySpec);
privateCipher = Cipher.getInstance("RSA");
privateCipher.init(Cipher.DECRYPT_MODE, privateKey);
result = privateCipher.doFinal(result);
System.out.println("公钥加密,私钥解密---解密:"+new String(result));
根据输出的结果不难发现,公钥和私钥并不一致,私钥的长度要大于公钥。
来源:https://www.cnblogs.com/AndroidJotting/p/4290685.html
标签:java,非对称,加密算法,rsa
0
投稿
猜你喜欢
解决SpringMVC使用@RequestBody注解报400错误的问题
2022-02-26 16:06:43
动态webservice调用接口并读取解析返回结果
2021-10-19 07:05:45
springboot返回前端中文乱码的解决
2023-08-09 11:49:12
Redisson RedLock红锁加锁实现过程及原理
2022-12-29 20:49:42
使用C#编写15子游戏
2023-03-23 08:28:52
Android实现连续点击多次事件的代码详解
2022-02-09 23:28:28
java 对象参数去空格方式代码实例
2023-11-27 09:49:34
C语言 简单粗暴的笨方法找水仙花数
2023-11-27 21:53:29
java中通用的线程池实例代码
2022-05-12 11:12:37
Javaweb El表达式实例详解
2021-06-21 22:59:32
C#实现按照指定长度在数字前补0方法小结
2023-02-23 09:42:32
Java 栈与队列超详细分析讲解
2023-08-15 01:09:07
通过Java实现设置Word文档页边距的方法详解
2022-04-07 14:00:31
搞懂Java线程池
2021-08-04 10:01:06
如何用Stream解决两层List属性求和问题
2022-07-31 20:32:35
Java之NIO基本简介
2021-12-20 22:15:44
Android自定义实现开关按钮代码
2022-04-07 21:35:48
java(jdk)环境变量配置(XP、win7、win8)图文教程详解
2021-11-01 15:06:48
解析Java和Eclipse中加载本地库(.dll文件)的详细说明
2023-11-11 01:23:31
Android LineChart绘制折线图的示例详解
2022-10-15 22:43:37