用途:适用于少量数据的加密解密(RSA加密特点:安全性高、成熟度高、速度慢、资源消耗高)

第一步:工具类(2个)

RSA工具类

import javax.crypto.Cipher;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;/*** RSA工具类* @author szw* @version 1.0* @since JDK1.8*/
public class RSAUtil {private static KeyPair keyPair;private static String publicKeyStr;private static String privateKeyStr;public static String getPublicKeyStr() {return publicKeyStr;}public static void setPublicKeyStr(String publicKeyStr) {RSAUtil.publicKeyStr = publicKeyStr;}public static String getPrivateKeyStr() {return privateKeyStr;}public static void setPrivateKeyStr(String privateKeyStr) {RSAUtil.privateKeyStr = privateKeyStr;}static {try {keyPair = getKeyPair();} catch (Exception e) {e.printStackTrace();}publicKeyStr = getPublicKey();privateKeyStr = getPrivateKey();}/*** 生成密钥对* @return* @throws Exception*/private static KeyPair getKeyPair() throws Exception {KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");keyPairGenerator.initialize(2048);KeyPair keyPair = keyPairGenerator.generateKeyPair();return keyPair;}/*** 获取公钥(Base64编码)* @return*/private static String getPublicKey(){PublicKey publicKey = keyPair.getPublic();byte[] bytes = publicKey.getEncoded();return Base64Util.byteToBase64(bytes);}/*** 获取私钥(Base64编码)* @return*/private static String getPrivateKey(){PrivateKey privateKey = keyPair.getPrivate();byte[] bytes = privateKey.getEncoded();return Base64Util.byteToBase64(bytes);}/*** 公钥加密* 加密后的内容经过了base64转码* @param msg* @return* @throws Exception*/public static String publicEncrypt(String msg) throws Exception{byte[] content = msg.getBytes();byte[] keyBytes = Base64Util.base64ToBytes(publicKeyStr);X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance("RSA");PublicKey publicKey = keyFactory.generatePublic(keySpec);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] bytes = cipher.doFinal(content);return Base64Util.byteToBase64(bytes);}/*** 私钥解密** @param publicEncrypt 经过base64转码的密文* @return* @throws Exception*/public static String privateDecrypt(String publicEncrypt) throws Exception{byte[] content = Base64Util.base64ToBytes(publicEncrypt);byte[] keyBytes = Base64Util.base64ToBytes(privateKeyStr);PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey privateKey = keyFactory.generatePrivate(keySpec);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] bytes = cipher.doFinal(content);return new String(bytes);}}

base64工具类

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.IOException;/*** base64工具类* @author szw* @version 1.0* @since JDK1.8*/
public class Base64Util {/*** 将字节码转换成base64** @param bytes* @return*/public static String byteToBase64(byte[] bytes) {BASE64Encoder base64Encoder = new BASE64Encoder();return base64Encoder.encode(bytes);}/*** 将base64转换成字节码* @param base64* @return* @throws IOException*/public static byte[] base64ToBytes(String base64) throws IOException {BASE64Decoder base64Decoder = new BASE64Decoder();return base64Decoder.decodeBuffer(base64);}
}

使用方式:

用工具类生成RSA密钥对保存起来:

String publicKeyStr = RSAUtil.getPublicKeyStr();
String privateKeyStr = RSAUtil.getPrivateKeyStr();

使用密钥对进行加密解密:

/*** * @author sunziwen* 2018-08-13 11:04* @version 1.0**/
public class Main {public static void main(String args[]) throws Exception {String publicKeyStr = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5t9yr2YPa/Cmy2gUbItLxmSpkizcTH0z\n" +"YnBZ7x3n07HNuRPAe215tZtodfSoz9GxpLKgn9HrKan5zQN6ESJ2U21evcY0VZjWYMBY0X9oJNQq\n" +"FQyZwYVH78//yYzcDyZejVy54/SFeWUwv89Gy155I96ao0pao4CJh16sf/b7H60+idzmmye/o9PK\n" +"5JiiOSGEaNyMFFlmg11gTrBqHN/7PAHNc6V22a9GpMeKfO7qEljBEyfzgkxhC6JP1dOOqIS9iBRg\n" +"wIymZxYWQaRhVfhniRYQZKQYBr3uZ6zRi/np7C8M8TWK3riHey5y/U868XELzdAmgwFJz3mjcnZJ\n" +"Rze6SwIDAQAB";String privateKeyStr = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDm33KvZg9r8KbLaBRsi0vGZKmS\n" +"LNxMfTNicFnvHefTsc25E8B7bXm1m2h19KjP0bGksqCf0espqfnNA3oRInZTbV69xjRVmNZgwFjR\n" +"f2gk1CoVDJnBhUfvz//JjNwPJl6NXLnj9IV5ZTC/z0bLXnkj3pqjSlqjgImHXqx/9vsfrT6J3Oab\n" +"J7+j08rkmKI5IYRo3IwUWWaDXWBOsGoc3/s8Ac1zpXbZr0akx4p87uoSWMETJ/OCTGELok/V046o\n" +"hL2IFGDAjKZnFhZBpGFV+GeJFhBkpBgGve5nrNGL+ensLwzxNYreuId7LnL9TzrxcQvN0CaDAUnP\n" +"eaNydklHN7pLAgMBAAECggEBAJLhCXdpONp1CchSeNvtatHW7MKgY68N4Aj6bVzg68IUVksus8BS\n" +"j6HoMvcIJfXA9IFRWzsSM8gX6WJymdAY2qqM5D9bv6PNTmXTOS5fHgSALh2iHJevkWqSK6swQDgr\n" +"MvBAU8sgn2Hx7Ke62NE9U1hsoHjOLwfiGJzUsG3g1Tb6rWrKz+fyVBtwQE0GwsWPKpft1XfSuTNg\n" +"c8Jh+//wXqyn+k+MgTmdstnHb7zfhPC5CSzmhmuZLl68ry1HaFvPjQpAmcKjVKIgK+qkb2+RYz84\n" +"XHl2PInN3rggNmfP6lD8TF8i53BIv3ziksaITk4YK1AfLKb6Wjt7A1gCgoq9A1ECgYEA+KWd1vUo\n" +"0OM466CKioJD7/VSOvVR2QAdS3TiWclUVWjL6lOTBhJf0Y8oK9xy3+XNykwKF2YoFpkIikO5dX7l\n" +"NZTwJ2J66Ij006ocYlWtyUcBgJCIt7QTGSdxnvDdt25x1UXXbch2PaH7P4OPhdlWkeckJyQ0hycY\n" +"m3ktoEm5/dUCgYEA7bNFwv4KpbmXRpTZvpWi6uuDQnYIH6fb5Qozp0WbAZY2RjPpUpGz54loiusz\n" +"RRqdP9sr79GIARAuxvJAFRcnmZKcbrEQEFSzO0fFVX0f1HIfMrkce0Cpk8Y2RSkmeYmSvr1vlZ6d\n" +"QnuTzBV9HtJvtwQ9LbbBQkjCffQEQeeZR58CgYEAyaaXMaO1rGL64K1cbiRjMJJGVCZscI6VM4Lh\n" +"p2uOB45sAegxjnUMXIm7TIcGauqWUQAGFx/0Vw9ZS7jNCasV/LSDZ42InFmmJJsLVfyiamA5qaiO\n" +"GF3kNzwz+3Dgf0kE7LAtnI08x5M8jjAGD8lJWh6YxV2pdAqS/FP0WtAwFNkCgYAmEKJoUoRj+6+F\n" +"BwtDoPThB+wSNZKhdyEYsaSJ8fSbsXFplqCTr2+O8YtDS9z/AP8TncaQdg6AlRXYmCy48+dMiZTx\n" +"iPtYkifNo3WvdgUl4Uyrs8ci2b0ORBymwKs/pU9RqkZ3QFpQrjeB5CMQT4TCWzRs4KpcMgirYOtZ\n" +"nnwGYwKBgEmmGl5KHjeDvZx+WkYOV+LXzsvVaBxHFE/LFHD5srcoeSW2dyBK8q+RXwpFQsmh9Q58\n" +"ARb/hyWZ70V+XeTRKPPt9B4nYu1s40liZGFAf5Dutd7aDWL7H8FlBYhYa9u1wv4x5YtRKItNvwl6\n" +"G8id3M/BPGsJrOJrmhhFyOTiJc/V";/*** 待加密数据*/String msg = "身先士卒";RSAUtil.setPublicKeyStr(publicKeyStr);RSAUtil.setPrivateKeyStr(privateKeyStr);/*** 公钥加密*/String publicEncrypt = RSAUtil.publicEncrypt(msg);/*** 私钥解密*/String privateDecrypt = RSAUtil.privateDecrypt(publicEncrypt);}}

开罐即用系列-RSA加密解密相关推荐

  1. iOS使用Security.framework进行RSA 加密解密签名和验证签名

    iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...

  2. ios php rsa加密解密,php rsa加密解密使用详解

    第一条命令生成原始 RSA私钥文件 rsa_private_key.pem,第二条命令将原始 RSA私钥转换为 pkcs8格式,第三条生成RSA公钥 rsa_public_key.pem 从上面看出通 ...

  3. genrsa out php,PHP进行RSA加密解密

    最近在着手写一个服务端安全接口规范,需要用到RSA加密解密.所以小试牛刀一下,并且做个记录. 环境: Win7 64位 PHP 5.6.12 需要原型工具: 一.安装OpenSSL 随意安装到哪里 二 ...

  4. C# Java间进行RSA加密解密交互

    C# Java间进行RSA加密解密交互 原文:C# Java间进行RSA加密解密交互 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益, ...

  5. RSA加密解密及数字签名Java实现--转

    RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院 ...

  6. [crypto]-53-openssl命令行的使用(aes/rsa签名校验/rsa加密解密/hmac)

    常用技巧 如何编写一个二进制规律性的文件, 比如你可以编写一个"0123456789abcdef"的文本文件,记得删除换行符然后用ultraedit打开,ctrl+H就可以看到二进 ...

  7. Java使用RSA加密解密签名及校验

    RSA加密解密类: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; i ...

  8. python实现rsa加密源代码_python实现RSA加密(解密)算法

    RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. 今天只有短的RSA钥匙才可能被强力方式解破.到2008年为止,世界上还没有任何可靠 ...

  9. python下RSA加密解密以及跨平台问题

    项目合作需要,和其他网站通信,消息内容采用RSA加密方式传递.之前没有接触过RSA,于是两个问题出现了: 声明: 环境WIN 7 + python 2.6.6 RSA格式:PEM 一.Python下R ...

最新文章

  1. windows串口控制linux,linux及windows下串口的使用.doc
  2. Java :BufferedWriter类和BufferedReader类的构造方法、主要方法
  3. c++ 之动态数组简单介绍
  4. Mysql对事务的支持
  5. HashSet存储自定义类型元素
  6. 可以直视烤箱里面的食物吗?
  7. 华为专家助你1个月拿下物联网高工认证,首次提供全方位就业指导!
  8. 博客园与我的第一次相遇
  9. 2019春第一课程设计报告
  10. DevExpress Xaf入门——关于树形结构对象的配置(DC模式)
  11. 2020年下半年信息系统项目管理师综合知识真题试题解析
  12. 为驾驶安全护航,基于目标检测模型实现驾驶疲劳检测
  13. 如何免费在线听周杰伦的歌曲
  14. Excel数据透视表数据源自动更新方法
  15. 相机模型(针孔、广角)
  16. 华为云 内容审核API调用 前端 js uni-app
  17. 模态对话框和非模态对话框的区别
  18. 情人节送ta一朵独一无二的玫瑰花
  19. android控件属性padding
  20. vb怎样访问网络服务器的access数据库

热门文章

  1. 利用HTML5 Web Audio API给网页JS交互增加声音
  2. 07Word自动生成图表目录
  3. 最全整理!37 个 Python Web 开发框架总结
  4. JDBC insert语句
  5. 量子隐形传态过程的推导(Quantum teleportation)
  6. SpringBoot + Vue 前后端分离(用户信息更新头像上传Markdown图片上传)
  7. LiFS: Low Human-Effort, Device-Free Localization with Fine-Grained Subcarrier Information
  8. Scrum: 增量和迭代开发有什么区别?Scrum: Incremental vs Iterative
  9. c语言union内存大小,C语言、C++中的union用法总结
  10. DialogResult的使用一