开罐即用系列-RSA加密解密
用途:适用于少量数据的加密解密(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加密解密相关推荐
- iOS使用Security.framework进行RSA 加密解密签名和验证签名
iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...
- ios php rsa加密解密,php rsa加密解密使用详解
第一条命令生成原始 RSA私钥文件 rsa_private_key.pem,第二条命令将原始 RSA私钥转换为 pkcs8格式,第三条生成RSA公钥 rsa_public_key.pem 从上面看出通 ...
- genrsa out php,PHP进行RSA加密解密
最近在着手写一个服务端安全接口规范,需要用到RSA加密解密.所以小试牛刀一下,并且做个记录. 环境: Win7 64位 PHP 5.6.12 需要原型工具: 一.安装OpenSSL 随意安装到哪里 二 ...
- C# Java间进行RSA加密解密交互
C# Java间进行RSA加密解密交互 原文:C# Java间进行RSA加密解密交互 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益, ...
- RSA加密解密及数字签名Java实现--转
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院 ...
- [crypto]-53-openssl命令行的使用(aes/rsa签名校验/rsa加密解密/hmac)
常用技巧 如何编写一个二进制规律性的文件, 比如你可以编写一个"0123456789abcdef"的文本文件,记得删除换行符然后用ultraedit打开,ctrl+H就可以看到二进 ...
- Java使用RSA加密解密签名及校验
RSA加密解密类: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; i ...
- python实现rsa加密源代码_python实现RSA加密(解密)算法
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. 今天只有短的RSA钥匙才可能被强力方式解破.到2008年为止,世界上还没有任何可靠 ...
- python下RSA加密解密以及跨平台问题
项目合作需要,和其他网站通信,消息内容采用RSA加密方式传递.之前没有接触过RSA,于是两个问题出现了: 声明: 环境WIN 7 + python 2.6.6 RSA格式:PEM 一.Python下R ...
最新文章
- windows串口控制linux,linux及windows下串口的使用.doc
- Java :BufferedWriter类和BufferedReader类的构造方法、主要方法
- c++ 之动态数组简单介绍
- Mysql对事务的支持
- HashSet存储自定义类型元素
- 可以直视烤箱里面的食物吗?
- 华为专家助你1个月拿下物联网高工认证,首次提供全方位就业指导!
- 博客园与我的第一次相遇
- 2019春第一课程设计报告
- DevExpress Xaf入门——关于树形结构对象的配置(DC模式)
- 2020年下半年信息系统项目管理师综合知识真题试题解析
- 为驾驶安全护航,基于目标检测模型实现驾驶疲劳检测
- 如何免费在线听周杰伦的歌曲
- Excel数据透视表数据源自动更新方法
- 相机模型(针孔、广角)
- 华为云 内容审核API调用 前端 js uni-app
- 模态对话框和非模态对话框的区别
- 情人节送ta一朵独一无二的玫瑰花
- android控件属性padding
- vb怎样访问网络服务器的access数据库
热门文章
- 利用HTML5 Web Audio API给网页JS交互增加声音
- 07Word自动生成图表目录
- 最全整理!37 个 Python Web 开发框架总结
- JDBC insert语句
- 量子隐形传态过程的推导(Quantum teleportation)
- SpringBoot + Vue 前后端分离(用户信息更新头像上传Markdown图片上传)
- LiFS: Low Human-Effort, Device-Free Localization with Fine-Grained Subcarrier Information
- Scrum: 增量和迭代开发有什么区别?Scrum: Incremental vs Iterative
- c语言union内存大小,C语言、C++中的union用法总结
- DialogResult的使用一