使用OpenSSL生成对应RSA私钥和RSA公钥:

#rsa私钥:
genrsa -out rsa_private_key.pem 1024
pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform pem -nocrypt -out rsa_private_key_8.pem
#rsa公钥:
rsa -in rsa_private_key_8.pem -pubout -out rsa_public_key.pem

Base64使用的是这样Maven

<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.11</version>
</dependency>

这里生成的公钥和私钥是Base64的,如下:

公钥:

所以用的时候需要先用base64解密。

使用逻辑是这样的,先那这些密钥进行Base64解密。

在用公钥给内容加密,用私钥解密:

Base64相关的代码:

DataSecret.java

package cn.it1995.tool;import org.apache.commons.codec.binary.Base64;import java.io.UnsupportedEncodingException;public class DataSecret {public static byte[] encode(byte[] txt) throws UnsupportedEncodingException {return Base64.encodeBase64(txt);}public static byte[] decode(String txt){return Base64.decodeBase64(txt);}
}

RSA.java

package cn.it1995.tool;import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPrivateCrtKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;public class RSA {private static final String RSA_ALGORITHM = "RSA/ECB/PKCS1Padding";//加密回的是base64public static String encrypt(String data, String key) throws UnsupportedEncodingException {String message = data;byte[] decode = DataSecret.decode(key);byte[] result = new byte[]{0};try {RSAPublicKey publicKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decode));Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, publicKey);result = cipher.doFinal(message.getBytes("UTF-8"));}catch (NoSuchAlgorithmException e) {e.printStackTrace();}catch (InvalidKeySpecException e) {e.printStackTrace();}catch (NoSuchPaddingException e) {e.printStackTrace();}catch (BadPaddingException e) {e.printStackTrace();}catch (IllegalBlockSizeException e) {e.printStackTrace();}catch (InvalidKeyException e) {e.printStackTrace();}return new String(DataSecret.encode(result));}//解密public static String decrypt(String encrypted, String key){byte[] content = DataSecret.decode(encrypted);byte[] decoded = DataSecret.decode(key);byte[] result = new byte[]{0};try {RSAPrivateCrtKey priKey = (RSAPrivateCrtKey)KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, priKey);result = cipher.doFinal(content);}catch (InvalidKeySpecException e){e.printStackTrace();}catch (NoSuchAlgorithmException e) {e.printStackTrace();}catch (NoSuchPaddingException e) {e.printStackTrace();}catch (InvalidKeyException e) {e.printStackTrace();}catch (BadPaddingException e) {e.printStackTrace();}catch (IllegalBlockSizeException e) {e.printStackTrace();}return new String(result);}
}

调用代码:

    private static final String PUB_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCjuN97tkBc0QcKGU9oXydaQN7q" +"wZnThxTOmdIc8O1yuA9FrDZpZ3Sz908vTqM/YPZkOUaYrGwsBO7FeQovoX7nQPKu" +"YQpRDqt7OKzhwPavyynH0Jz38PDyCBw45zwl4Ux8BtsggTrGVxAqNjO4KkuyL1QS" +"8amn4Fzl1CBre8Y0gQIDAQAB";private static final String PRI_KEY = "MIICdAIBADANBgkqhkiG9w0BAQEFAASCAl4wggJaAgEAAoGBAKO433u2QFzRBwoZ" +"T2hfJ1pA3urBmdOHFM6Z0hzw7XK4D0WsNmlndLP3Ty9Ooz9g9mQ5RpisbCwE7sV5" +"Ci+hfudA8q5hClEOq3s4rOHA9q/LKcfQnPfw8PIIHDjnPCXhTHwG2yCBOsZXECo2" +"M7gqS7IvVBLxqafgXOXUIGt7xjSBAgMBAAECgYAgp0uzcdsOaAY+ZmPnDitcHdoX" +"+jsC7EsjFZzJduf03G73V2yWwzKMfkPFzKpUhrM9tAq3gpQkh2tT6Vs1usEDbrDd" +"e08Cc3D5YWK7HuTfO3kkJTSNOK0JfuT1UQaTjCmDQWWjPmYbu6UN0UDv4Mo26dgl" +"cp9h0wlaPsSFN3O97QJBANgj+4i7ABAdbTuUfq6Tcr38E7wYSFTUeL5jTd4sO636" +"+KJ6zx4uTXAmxnt9OdIY1ihLRqDh8VbiorqOelGf6iMCQQDB6jZver3mTMe6ntSY" +"hx3JWOCDM3ULkPvOWGrAcRsNKjyIuo37taXa7fuqmVQQq9MJYikJfilMhkgwkV/X" +"ihcLAkBsOvBskj9A0ottJzmcT4dIbR6wtHQbzl078NwAIaQsxZyVN+vY0BTE0RXY" +"pmc6tmcevDr8uscv28Liqg/EKdCDAkAjL9C44djblUsYvgFtu/bXtlzm8ctnUeOf" +"ScP1L5DtDqD1XoStDAUQeOaVykTK0aL1rO4tXss3q5Yl2fs+LTyJAj8f7N5kzw08" +"9S5OWCHoEm5UOeAvjFh//cjXi6lyqetBW3w17muZ2OumUAbKJXksyzmT6/QRpkX3" +"S0w/tqdJXLs=";public static void main(String[] args) throws UnsupportedEncodingException {String content = "123456";String encrypted = RSA.encrypt(content, PUB_KEY);System.out.println(encrypted);System.out.println(RSA.decrypt(encrypted, PRI_KEY));............}

运行截图如下:

Java笔记-非对称加密RSA的使用相关推荐

  1. Java(110):非对称加密RSA的使用(KeyPair生成密钥)

    Java(110):非对称加密RSA的使用(KeyPair生成密钥) RSA 算法是一种非对称加解密算法.服务方生成一对 RSA 密钥,即公钥 + 私钥,将公钥提供给调用方,调用方使用公钥对数据进行加 ...

  2. Java(111):非对称加密RSA的使用(openssl生成RSA公私钥对)

    Java(111):非对称加密RSA的使用(openssl生成RSA公私钥对) 1.openssl生成RSA公私钥对 [root@loaclhost ~]# openssl version OpenS ...

  3. Kotlin 非对称加密RSA

    非对称加密简介: 常用算法:RSA 秘钥对:公钥和私钥,必须由系统生成 公钥加密,私钥解密:私钥加密,公钥解密 公钥互换:两个组织或者个人互相交换公钥 加密速度慢 私钥和公钥加密 /*** 非对称加密 ...

  4. 编解码base64、对称加密aes和非对称加密rsa

    base64 :(兼容所有bit8位的字符,然后用64种字符进行转码,达到一致性) 意思就是:考虑到多语言原因,有的特殊字符传输不兼容,因为很多都是只支持ASSIC码,那么特殊字符就会找不到对应的AS ...

  5. pandorabox mysql_GitHub - gy-games/pandorabox: 基于非对称加密(RSA)的私密信息传递工具,数据由本地客户端进行加密、解密操作。...

    PandoraBox | 私密信息传递工具 基于非对称加密(RSA)的私密信息传递工具,数据由本地客户端进行加密.解密操作,密文通过网络进行传输,确保信息的安全性! -- Browse Website ...

  6. Android加密算法之非对称加密RSA

    丨版权说明 :<Android加密算法之非对称加密RSA>于当前CSDN博客和乘月网属同一原创,转载请说明出处,谢谢. 上文<Android加密算法之对称加密AES>提到与对称 ...

  7. c语言字符串非对称加密,RSA算法C语言实现(支持任意位密钥)

    之前分享过三种常用MD5.SHA2和AES加密算法(点这里)实现源码,前三者分别属于哈希加密和对称加密,而另一种很常用的非对称加密RSA算法实现这次分享出来.RSA算法的原理和用途大家可以网上自行搜索 ...

  8. php封装一个加密算法,PHP封装的非对称加密RSA算法示例

    本文实例讲述了PHP封装的非对称加密RSA算法.分享给大家供大家参考,具体如下: 将php的openssl扩展中的非对称加密函数封装成一个Rsa类. 需要注意的是,在windows上,需要打开open ...

  9. (1)非对称加密——RSA——史上最通俗的小白可看懂!

    摘要 我身边有几个年龄分布在4-6岁的小朋友.由于他们还都不能熟练地掌握100以内的加减法,所以我原计划的对称加密,在他们看来还是有点难.那非对称加密呢,需要他们能熟练进行三位数的乘法,我想就可以逐步 ...

最新文章

  1. Ubuntu16.04打开和关闭桌面显示
  2. c++枚举类型(一)
  3. JVM实用参数(八)GC日志
  4. 单元测试debug过程中,显示variables are not available
  5. 深度学习的实用层面 —— 1.9 正则化输入
  6. mac 终端 svn 命令
  7. 个性化联邦学习算法框架发布,赋能AI药物研发
  8. 我对C++的一些疑问
  9. Unicode 编码解码
  10. eclipse maven打包_我的Java Web之路47 - 使用Maven改造租房网工程
  11. 动态属性 的简单思考
  12. ES6+webpack实现Counter
  13. 在Windows NT上装还原卡
  14. 【Windows】win10电脑Miracast投屏到电视
  15. wget: unable to resolve host address的解决方法
  16. JAVA网络编程个人笔记 第三章 多线程
  17. java 按照拼音排序_java List中元素按照拼音排序
  18. 安卓手机卡顿怎么解决_苹果手机卡怎么办 小技巧解决ipone手机卡顿现象
  19. 密码学之背包加密系统(Merkle–Hellman公钥加密算法)原理
  20. K3ERP web登录问题解决

热门文章

  1. php5.5.* mysqlnd驱动安装
  2. 柴油机制造商QMD谈System Center 2012实践
  3. 秋高气爽FreeEIM
  4. 获得磁盘的C++描述信息
  5. Java、JavaScript、C、C++、PHP、Python都是用来开发什么?赶紧来看看!
  6. Google推出了Python最牛逼的编辑器,你知道吗?
  7. 台式计算机内存是什么意思,电脑提示计算机内存不足是什么意思
  8. 树莓派vnc用法 linux,怎样使用VNC在树莓派上运行远程桌面
  9. laravel php7.2报错,laravel,php_运行php artisan serve时报错,laravel,php - phpStudy
  10. google地图 离线版 经纬度_一款钓鱼人专用的卫星地图,野钓找水库找钓点找进水口不是梦。...