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
  • asp之家 软件编程 m.aspxhome.com