http://web.chacuo.net/netrsakeypair  公私钥生成地址package com.audaque.module.core.utils;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import javax.crypto.Cipher;
import java.io.*;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.cert.CertificateFactory;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;/*** RSA加密*/
public class RSAutils {private static final Logger LOGGER= LoggerFactory.getLogger(RSAutils.class);/*** RSA最大加密明文大小*/private static final int MAX_ENCRYPT_BLOCK = 117;/*** RSA最大解密密文大小(如果秘钥是1024bit,解密最大块是128,如果秘钥是2048bit,解密最大块是256)*/private static final int MAX_DECRYPT_BLOCK = 128;private static PrivateKey globalPrivateKey = null;private static PublicKey globalPublicKey = null;public static PrivateKey getPrivateKey(String prikeypath) throws Exception {if(globalPrivateKey != null){return globalPrivateKey;}String s="MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAOpG5g48YmAR2TQG\n" +"JcGtZ6WSTXePd92zfgzGsxoMkzCYBkAs/EageCJoix0wQfgZW9bPUVjyHWCPfY/D\n" +"2W2Ax/dW1CkPi1QVLgB7IY0v9A2vgqYnP1EA/44TW/DdqHlYQK4488dsMlHH17jF\n" +"oFxzigWA6zmkk0Qxc4i3YvxxW3HXAgMBAAECgYEAs7VvA7yOOeN3GdEdZVP/DaMM\n" +"iYokCIyHRIWnHXRH9B6prNDVM9gkT0CideFuuUG6kSy22ePfZRKs3nr9bmI7AKhY\n" +"TTS4JR6AFBKL1NSrRmEEtTRFTaMU3IgSdP/JoOATwKKlPhZdjHDQ9/cDYCe4S9k5\n" +"mBjMULbxRtC4F3ePbQECQQD8SGY/QRc91Ggo7nUffGxH4cFNqmUGtT7v3aMV/kNz\n" +"Umz5MhuTYaUeBtU5l650ZLK+zCMYcHH+jfDcgKk8SrfjAkEA7bqU9RcaBEx20h5c\n" +"gJQsLbk5S61a6AbZLQgDtMTueJ/e3785Jmc6r4hUbuOSPPGRPkOqFvMwsf2PC5zd\n" +"eaI4fQJBAPl5ApsUW85JiALJ40oSeOUQKl4J3MMoYadC7a2m9L5KSPaXhUtVqLkr\n" +"mpjMFLiGh3dDWIUnVKKbbA4wsKmtXW8CQQDE8ixxl7/wC8DsdkbAJwEqqCa1cVq8\n" +"mt/VFKytV/EQcbHcv7kC/cZ6oYEBlPsUDjT71mbVOIgBDUUyo7RADoqpAkA8CVOV\n" +"ndCRoFqH7aHASSfh3mU66HuvBVRyrq/1tfAF3JzNeI3O/X8BVS8UGvQYs79znDwM\n" +"3A2dIIQE096gA/OE";InputStream in = new ByteArrayInputStream(s.getBytes());//RSAutils.class.getClassLoader().getResourceAsStream(prikeypath);BufferedReader br = new BufferedReader(new InputStreamReader(in));StringBuilder sb = new StringBuilder();String readLine = null;while((readLine = br.readLine()) != null) {if(readLine.charAt(0) != 45) {sb.append(readLine);sb.append('\r');}}in.close();PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(sb.toString()));try {KeyFactory factory = KeyFactory.getInstance("RSA");PrivateKey privateKey = factory.generatePrivate(pkcs8EncodedKeySpec);globalPrivateKey = privateKey;return globalPrivateKey;} catch (Exception e) {LOGGER.error("获取私钥异常",e);throw e;}}public static PublicKey getPublicByPublic(String keypath) throws Exception {if(globalPublicKey != null){return globalPublicKey;}System.out.println(RSAutils.class.getClassLoader());String s="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDqRuYOPGJgEdk0BiXBrWelkk13\n" +"j3fds34MxrMaDJMwmAZALPxGoHgiaIsdMEH4GVvWz1FY8h1gj32Pw9ltgMf3VtQp\n" +"D4tUFS4AeyGNL/QNr4KmJz9RAP+OE1vw3ah5WECuOPPHbDJRx9e4xaBcc4oFgOs5\n" +"pJNEMXOIt2L8cVtx1wIDAQAB";InputStream in = new ByteArrayInputStream(s.getBytes());//RSAutils.class.getClassLoader().getResourceAsStream(keypath);BufferedReader br = new BufferedReader(new InputStreamReader(in));StringBuilder sb = new StringBuilder();String readLine = null;while((readLine = br.readLine()) != null) {if(readLine.charAt(0) != 45) {sb.append(readLine);sb.append('\r');}}in.close();CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");X509EncodedKeySpec ks = new X509EncodedKeySpec(Base64.decodeBase64(sb.toString()));KeyFactory kf = KeyFactory.getInstance("RSA");http://localhost:8086/DQMS_library/front/inner/source_field/insertDateBaseFields.jhtml?fileId=22&_=1584511073990globalPublicKey = kf.generatePublic(ks);return globalPublicKey;}public static String dencrypt(String str,String privateKeyStr) throws Exception{//64位解码加密后的字符串byte[] encryptedData = Base64.decodeBase64(str.getBytes("UTF-8"));PrivateKey privateKey = getPrivateKey(privateKeyStr);//RSA加密Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, privateKey);int inputLen = encryptedData.length;ByteArrayOutputStream out = new ByteArrayOutputStream();int offSet = 0;byte[] cache;int i = 0;// 对数据分段解密while (inputLen - offSet > 0) {if (inputLen - offSet > MAX_DECRYPT_BLOCK) {cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK);} else {cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);}out.write(cache, 0, cache.length);i++;offSet = i * MAX_DECRYPT_BLOCK;}byte[] decryptedData = out.toByteArray();out.close();String outStr = new String(decryptedData,"UTF-8");return outStr;}public static String encrypt(String data, String publicKeyPath) throws Exception{PublicKey pubKey = getPublicByPublic(publicKeyPath);//RSA加密Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, pubKey);byte[] dataByte = data.getBytes("UTF-8");int inputLen = dataByte.length;ByteArrayOutputStream out = new ByteArrayOutputStream();int offSet = 0;byte[] cache;int i = 0;// 对数据分段加密while (inputLen - offSet > 0) {if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {cache = cipher.doFinal(dataByte, offSet, MAX_ENCRYPT_BLOCK);} else {cache = cipher.doFinal(dataByte, offSet, inputLen - offSet);}out.write(cache, 0, cache.length);i++;offSet = i * MAX_ENCRYPT_BLOCK;}byte[] encryptedData = out.toByteArray();out.close();String outStr = Base64.encodeBase64String(encryptedData);return outStr;}public static void main(String[] args) throws Exception {//现在生成公私钥对,http://web.chacuo.net/netrsakeypairString data = "{\"appid\":\"10000\",\"columns\":[{\"columnId\":14991,\"columnName\":\"id\",\"columnRemark\":\"主键\"},{\"columnId\":14992,\"columnName\":\"data_source_name\",\"columnRemark\":\"\"},{\"columnId\":14993,\"columnName\":\"data_source_type\",\"columnRemark\":\"数据库类型\"},{\"columnId\":14994,\"columnName\":\"owner\",\"columnRemark\":\"用户名\"},{\"columnId\":14995,\"columnName\":\"display_text\",\"columnRemark\":\"备注名\"},{\"columnId\":14996,\"columnName\":\"guid\",\"columnRemark\":\"dayu主键\"},{\"columnId\":14997,\"columnName\":\"connection_guid\",\"columnRemark\":\"数据库连接guid\"},{\"columnId\":14998,\"columnName\":\"qualified_name\",\"columnRemark\":\"dayu唯一字段\"},{\"columnId\":14999,\"columnName\":\"remarks\",\"columnRemark\":\"备注\"},{\"columnId\":15000,\"columnName\":\"data_source_id\",\"columnRemark\":\"关联治理数据源ID\"},{\"columnId\":15001,\"columnName\":\"create_user\",\"columnRemark\":\"创建用户ID\"},{\"columnId\":15002,\"columnName\":\"create_time\",\"columnRemark\":\"创建日期时间\"},{\"columnId\":15003,\"columnName\":\"update_user\",\"columnRemark\":\"修改用户ID\"},{\"columnId\":15004,\"columnName\":\"update_time\",\"columnRemark\":\"修改日期时间\"},{\"columnId\":15005,\"columnName\":\"flag\",\"columnRemark\":\"数据状态(0:已删除 1:有效)\"},{\"columnId\":15025,\"columnName\":\"adqm_dayu_data_source_abc\",\"columnRemark\":\"\"}],\"timestamp\":1584942846781}";//使用公钥加密,第二个参数classpath下的公钥文件data = encrypt(data,"public1024.key");System.out.println("加密后的数据:"+data);//使用私钥解密,第二个参数classpath下的私钥文件data = dencrypt(data,"private1024.key");System.out.println("解密后的数据:"+data);String s="1584695311582";long s1=Long.valueOf(s);long time=System.currentTimeMillis();if (time-s1>60000){System.out.println("失效了");}}
}

RSA的非对称加密,公钥加密私钥解密,本地测试相关推荐

  1. RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密

    RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...

  2. asp版 vbscript RSA公钥加密 / 私钥解密 / 私钥签名 / 公钥验签(支持中文)分段加密解密

    最近有空在把自己的asp站点后端函数全部整理了下,在弄RSA的时候遇到了坑了,然后找到下面这位兄弟刚好发布的文章: https://blog.csdn.net/todaygods/article/de ...

  3. 分享一个RSA加解密工具类,公钥加密私钥解密、私钥加密公钥解密、私钥签名公钥验签、生成公钥私钥

    测试: public static void main(String[] args) {try {//生成公钥私钥Map<String, Object> map = RSAUtil.ini ...

  4. C#实现RSA公钥加密私钥解密、私钥加密公钥解密以及Pcks12、X509证书加解密、签名验签

    RSA的私钥签名公钥验签可以见 http://blog.csdn.net/starfd/article/details/51917916,所以这里就没提供对应代码,具体代码如下: using Org. ...

  5. ASP VBSCRIPT VBA RSA 公钥加密 私钥解密 私钥签名 公钥验签

    <% '@title: Class_Crypt_Rsa '@author: ekede.com '@date: 2020-10-28 '@description: RSA 公钥加密->私钥 ...

  6. RSA(非对称加密)加密/量子计算机解密

    RSA(非对称加密)加密/量子计算机解密 密码学有两种经典的加密方式: 对称加密与非对称加密. 什么是对称加密? 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对 ...

  7. 公钥加密私钥解密私钥加密公钥解密

    公钥加密体制 1.公钥加密体制用于保密性时,就是公钥加密,私钥解密. 因为公钥是可以公开了, 那么任何人都可以使用公钥对信息进行加密,但是只有持有私钥的人才能正确解密.这样就保证了信息的保密性,因为只 ...

  8. 非对称加密 公钥私钥_选择Java加密算法第3部分–公钥/私钥非对称加密

    非对称加密 公钥私钥 抽象 这是涵盖Java加密算法的三部分博客系列的第3部分. 该系列涵盖如何实现以下功能: 使用SHA–512散列 使用AES–256的单密钥对称加密 RSA–4096 这第三篇文 ...

  9. Php公钥加密data是空,php 生成加密公钥加密私钥实例详解

    php 生成加密公钥加密私钥实例详解 生成公钥私钥 win下必须要openssl.cof支持 liunx一般已自带安装 $config = array( //"digest_alg" ...

最新文章

  1. How good software makes us stupid?
  2. ldconfig及LD_LIBRARY_PATH
  3. (初学者)安装hadoop集群注意事项
  4. html溢出宽度控制,html - 具有固定宽度列的HTML / CSS表(如果内容溢出,则滚动) - 堆栈内存溢出...
  5. java的math类_Java之Math类使用小结
  6. SpringCloud config 配置中心介绍与基本配置使用
  7. android 标题栏 fragment,切换Fragment 并更换标题栏
  8. 发条js调试工具_【转载】移动端js调试工具:eruda
  9. HDU6268 Master of Subgraph
  10. sklearn库各个算法学习笔记
  11. Java习题>|异常>|throw自定义异常小案例
  12. 流程控制之if...else
  13. 谷歌插件FeHelper的安装和使用
  14. 试图速成的RPG Maker MV 学习笔记(二)
  15. 穷举法 解决用3个水桶等分8升水 python实现
  16. 极客时间《数据分析实战45讲 - 基础篇》学习笔记
  17. (附源码)基于PHP二手服装网站 毕业设计 201711
  18. 房贷又降,不买!还能降
  19. 小米总监说软件测试分为这及类
  20. 百度APIak和sk

热门文章

  1. 若依ruoyi框架实现单点登录或者接入统一认证
  2. MFC中关于char[]转换成LPCWSTR的问题
  3. 基于C51的DMX512开发笔记
  4. loadrunner如何确定预期TPS
  5. lt;html xmlns=http://www.w3.org/1999/xhtmlgt;
  6. 逆向工程实验——pre9(可执行文件的加密MD5碰撞lab)
  7. 有道笔记无法同步(笔录)
  8. MicroPython-On-ESP8266——数码管的使用,从一个8段管开始
  9. Halcon标定板标定
  10. webrtc 搭建直播平台