java 非对称加密算法RSA实现详解

所属分类: 软件编程 / java 阅读数: 40
收藏 0 赞 0 分享

现在就为大家介绍一种基于因子分解的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));

根据输出的结果不难发现,公钥和私钥并不一致,私钥的长度要大于公钥。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

JavaWeb项目部署到服务器详细步骤详解

这篇文章主要介绍了JavaWeb项目如何部署到服务器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

IDEA基于支付宝小程序搭建springboot项目的详细步骤

这篇文章主要介绍了IDEA基于支付宝小程序搭建springboot项目的详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解SpringBoot应用服务启动与安全终止

这篇文章主要介绍了SpringBoot应用服务启动与安全终止,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Boot启动及退出加载项的方法

这篇文章主要介绍了Spring Boot启动及退出加载项的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Data Jpa 自动生成表结构的方法示例

这篇文章主要介绍了Spring Data Jpa 自动生成表结构的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

IDEA中osgi的开发应用指南详解

这篇文章主要介绍了IDEA中osgi的开发应用指南详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解用maven将dubbo工程打成jar包运行

这篇文章主要介绍了详解用maven将dubbo工程打成jar包运行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解Java合并数组的两种实现方式

这篇文章主要介绍了Java合并数组的两种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

使用Jenkins Pipeline自动化构建发布Java项目的方法

这篇文章主要介绍了使用Jenkins Pipeline自动化构建发布Java项目的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

使用Maven配置Spring的方法步骤

这篇文章主要介绍了使用Maven配置Spring的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多