/**

* @Fields CHARSET :

*/

public static final String CHARSET = "UTF-8";

/**

* @Description:RSA ALGORITHM

* @Fields RSA_ALGORITHM :

*/

public static final String RSA_ALGORITHM = "RSA";

/**

* @Title: getPublicKey

* @Description: 获取RSA公钥

* @Author Administrator

* @DateTime 2018年11月19日 下午7:48:10

* @param publicKey

* @return

* @throws NoSuchAlgorithmException

* @throws InvalidKeySpecException

*/

public static RSAPublicKey getPublicKey(String publicKey) throws NoSuchAlgorithmException, InvalidKeySpecException {

//通过X509编码的Key指令获得公钥对象

KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);

X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKey));

RSAPublicKey key = (RSAPublicKey) keyFactory.generatePublic(x509KeySpec);

return key;

}

/**

* @Title: getPrivateKey

* @Description: 获取RSA私钥

* @DateTime 2018年11月19日 下午7:47:03

* @param privateKey 密钥字符串(经过base64编码)

* @return

* @throws NoSuchAlgorithmException

* @throws InvalidKeySpecException

*/

public static RSAPrivateKey getPrivateKey(String privateKey) throws NoSuchAlgorithmException, InvalidKeySpecException {

//通过PKCS#8编码的Key指令获得私钥对象

KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);

PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKey));

RSAPrivateKey key = (RSAPrivateKey) keyFactory.generatePrivate(pkcs8KeySpec);

return key;

}

/**

* @Title: publicEncrypt

* @Description: 公钥加密

* @DateTime 2018年11月19日 下午7:49:09

* @param data

* @param publicKey

* @return

*/

public static String publicEncrypt(String data, RSAPublicKey publicKey){

try{

Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);

cipher.init(Cipher.ENCRYPT_MODE, publicKey);

return Base64.encodeBase64URLSafeString(rsaSplitCodec(cipher, Cipher.ENCRYPT_MODE, data.getBytes(CHARSET), publicKey.getModulus().bitLength()));

}catch(Exception e){

throw new RuntimeException("加密字符串[" + data + "]时遇到异常", e);

}

}

/**

* @Title: privateDecrypt

* @Description: 私钥解密

* @DateTime 2018年11月19日 下午7:49:36

* @param data

* @param privateKey

* @return

*/

public static String privateDecrypt(String data, RSAPrivateKey privateKey){

try{

Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);

cipher.init(Cipher.DECRYPT_MODE, privateKey);

return new String(rsaSplitCodec(cipher, Cipher.DECRYPT_MODE, Base64.decodeBase64(data), privateKey.getModulus().bitLength()), CHARSET);

}catch(Exception e){

throw new RuntimeException("解密字符串[" + data + "]时遇到异常", e);

}

}

/**

* @Title: rsaSplitCodec

* @Description: RSA分割code

* @DateTime 2018年11月19日 下午7:50:11

* @param cipher

* @param opmode

* @param datas

* @param keySize

* @return

*/

private static byte[] rsaSplitCodec(Cipher cipher, int opmode, byte[] datas, int keySize){

int maxBlock = 0;

if(opmode == Cipher.DECRYPT_MODE){

maxBlock = keySize / 8;

}else{

maxBlock = keySize / 8 - 11;

}

ByteArrayOutputStream out = new ByteArrayOutputStream();

int offSet = 0;

byte[] buff;

int i = 0;

try{

while(datas.length > offSet){

if(datas.length-offSet > maxBlock){

buff = cipher.doFinal(datas, offSet, maxBlock);

}else{

buff = cipher.doFinal(datas, offSet, datas.length-offSet);

}

out.write(buff, 0, buff.length);

i++;

offSet = i * maxBlock;

}

}catch(Exception e){

throw new RuntimeException("加解密阀值为["+maxBlock+"]的数据时发生异常", e);

}

byte[] resultDatas = out.toByteArray();

IOUtils.closeQuietly(out);

return resultDatas;

}

pkcs1解密 springboot_Spring Boot RSA 非对称加密相关推荐

  1. CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互

    (以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 [cp ...

  2. java rsa 117_java实现RSA非对称加密解密

    之前写过一篇java实现AES对称加密解密 在对密码加密传输的场景下 RSA非对称加密解密可能会更加适合. 原理就是后台生成一对公钥和私钥,公钥给前端用来加密,后台用私钥去解密,保证了传输过程中就算被 ...

  3. RSA非对称加密和解密(同时生成密钥)

    RSA非对称加密和解密(同时生成密钥) 准备jar包 bcprov-jdk16-1.46.jar commons-codec-1.15.jar 获取jar地址:https://mvnrepositor ...

  4. 微信小程序RSA非对称加密。

    因公司做的产品为金融项目,所以对数据安全性有很高要求,因为项目中的数据都会通过3DES 对称加密,和RSA非对称加密进行数据传输. 在这里先简单介绍一下什么是对称加密和非对称加密 对称加密:对称加密采 ...

  5. JSON 接口如何实现 RSA 非对称加密与签名

    代码地址如下: http://www.demodashi.com/demo/14000.html 一.概述 1. 数字签名的作用:保证数据完整性,机密性和发送方角色的不可抵赖性,加密与签字结合时,两套 ...

  6. Atitit RSA非对称加密原理与解决方案

    Atitit RSA非对称加密原理与解决方案 1.1. 一.一点历史 1 1.2. 八.加密和解密 2 1.3. 二.基于RSA的消息传递机制  3 1.4. 基于rsa的授权验证机器码 4 1.5. ...

  7. 前后端数据加密传输 RSA非对称加密

    任务需求:要求登陆时将密码加密之后再进行传输到后端. 经过半天查询摸索折腾,于是有了如下成果: 加密方式:RSA非对称加密. 实现方式:公钥加密,私钥解密. 研究进度:javascript与java端 ...

  8. Springboot+RSA非对称加密

    这是百度百科对(对称加密丶非对称加密)的解释: (1)对称加密算法在加密和解密时使用的是同一个秘钥. (2)非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称 ...

  9. 数据加密 RSA非对称加密篇

    先把代码贴上来,理论后续补充,暂时可先参考数据加密 总篇 package com.jlpay.partner.utils;import android.util.Base64;import java. ...

最新文章

  1. mysql可以使用dataguard_逻辑DataGuard的配置
  2. 使用C#进行系统编程
  3. oracle之数据处理之视图练习
  4. linux: sort用法
  5. 开源分布式数据库 TiKV 入选 CNCF 云原生项目!
  6. 我们一起学习WCF 第五篇数据协定和消息协定
  7. 虚拟机利用Host-only实现在不插网线的情况下,虚拟机与主机实现双向通信,实现ssh连接以及samba服务实现共享...
  8. SecoClient 接收返回码超时
  9. TracePro v6.02 Win32-ISO 1CD(光学机构仿真软件\
  10. ubunut安装stlink
  11. 流式布局之京东首页案例
  12. 如何制定有效的项目管理计划?
  13. 怎么修改服务器玩家等级级上限,战神引擎服务端限制玩家最高等级教程
  14. 【课程·研】工程伦理学 | 课堂汇报:个性化推荐技术的伦理学——以平台广告精准投放事件为例
  15. 换内存条电脑蓝屏问题【已解决】
  16. 高一被清华姚班录取,高三委拒谷歌 offer,一个重度网瘾少年到理论计算机科学家的蜕变!...
  17. 《淘宝店铺营销推广一册通》一1.1 什么是网店推广
  18. BOS物流管理系统-第五天
  19. kali安装keylogger_小白日记48:kali渗透测试之Web渗透-XSS(二)-漏洞利用-键盘记录器,xsser...
  20. 黑链是什么意思,什么是黑链?

热门文章

  1. js 判断字符串为空的方法
  2. Android WebView的Js对象注入漏洞解决方案
  3. c++ loadlibrary 初始化对象_C++构造函数和初始化表
  4. mysql排插问题_手把手教你分析 MySQL 死锁问题
  5. Hive Hooks介绍
  6. 数据库(表结构和数据) 保存为 *.sql文件
  7. 剑指Offer的学习笔记(C#篇)-- 用两个栈实现队列
  8. python basemap的安装
  9. Codeforces Gym101473 F.Triangles-前缀和 (2013-2014 ACM-ICPC Brazil Subregional Programming Contest)...
  10. JS-以鼠标位置为中心的滑轮放大功能demo1