RSA私钥解密操作

RSA私钥解密操作

  • 一、背景
  • 二、操作
  • 三、常见问题
    • 3.1 invalid key format
    • 3.2 解密的数据太长
    • 3.3 Decryption error

一、背景

项目数据库中存放的敏感字段已使用rsa加密的方式,将内容加密成密文存放,
现在需要在使用的时候,使用私钥进行解密。

二、操作

代码如下:

public class RsaUtil {private static final int MAX_DECRYPT_BLOCK = 256;/*** 解密方法* @param content  需解密内容* @param privateKey 私钥* @return*/public static String decryptByPrivateKey(String content,String privateKey) {String decryptContent;try {PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey));PrivateKey priKey  = KeyFactory.getInstance("RSA").generatePrivate(keySpec);//RSA解密Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, priKey);log.info("provider:{}",cipher.getProvider());byte[] encryptedData = Base64.getDecoder().decode(content);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;}out.close();decryptContent = out.toString();} catch (Exception e){log.error("rsa解密内容:"+content+"失败",e);throw new RsaException("rsa解密内容:"+content+"失败",e);}return decryptContent;}}

三、常见问题

3.1 invalid key format

错误信息如下:

Caused by: java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key formatat sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:217)at java.security.KeyFactory.generatePrivate(KeyFactory.java:372)

原因:
私钥转成byte数组时没有使用base64解码的方式:
在这里插入图片描述

3.2 解密的数据太长

参考文章:
https://blog.csdn.net/qq_42795685/article/details/107517196

错误信息如下:

IllegalBlockSizeException: Data must not be longer than 256 bytes

解决:
采用分段解密的方式。具体请参考代码中分段解密注释的部分

3.3 Decryption error

参考文章:

  1. https://blog.csdn.net/a1017680279/article/details/79061412?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-79061412-blog-71627949.235%5Ev38%5Epc_relevant_anti_vip_base&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-79061412-blog-71627949.235%5Ev38%5Epc_relevant_anti_vip_base&utm_relevant_index=1

  2. https://juejin.cn/post/7182388540259450940

错误信息:

javax.crypto.BadPaddingException: Decryption error

原因:
代码中采取分段解密的方式时,配置的最大解密长度不正确,即以上代码中的MAX_DECRYPT_BLOCK 变量配置长度有问题;

解决:
MAX_DECRYPT_BLOCK应等于密钥长度/8(1byte=8bit),
“密钥长度”一般只是指模值的位长度。目前主流可选值:1024、2048、3072、4096,
我使用的密钥长度是2048,所以配置的最大解密长度应该是256。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/111008.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cublas_v2.h没有那个文件和目录,解决

我的是orin,使用的cuda11.4,后来发现通过sudo jetson_release看到的CUDA是没有安装的。 定位到问题是: 使用ls /usr/local/ -lha查看软连接,如下: 能够发现cuda这个软连接是有问题的,他链接的是cuda10.2 …

网页接口导入postman进行接口请求

postman版本:v10.17.4 一、拷贝接口信息 网页打开开发者工具-networkk,在网页上请求一次接口,鼠标指在接口上,点击鼠标右键-copy-copy as cURL(bash) 二、导入postman 打开postman,点击import-Raw text,…

mysql--数据库的操作

数据库,是数据存储的最大单元。 1 创建数据库 create database mydatabase; 每次创建数据库的时候,都会多一个文件夹,关系型数据库是存储在磁盘当中的,所以这时候可以查看新建的数据库 2 指定字符集 MySQL中的字符集转换过程 制…

zookeeper启动失败(Error contacting service. It is probably not running.)

问题描述 启动zk时报如下错误: 解决办法 先查日志找找报错原因: 找到zk安装目录下的logs文件夹下的日志文件,查看连接失败原因: 如果是端口问题,修改conf文件,指定端口重新启动即可: 注&a…

解决华为云ping不通的问题

进入华为云控制台。依次选择:云服务器->点击服务器id->安全组->更改安全组->添加入方向规则,添加一个安全组规则(ICMP),详见下图 再次ping公网ip就可以ping通了 产生这一问题的原因是ping的协议基于ICMP协…

Python爬虫网络安全:优劣势和适用范围分析

各位Python程序猿大佬们!在当今数字化时代,网络安全是至关重要的。保护你的网络通信安全对于个人和组织来说都是非常重要的任务。在本文中,我将与你一起探讨Python网络安全编程中的代理、虚拟专用网络和TLS这三个关键概念,分析它们…

回归预测 | MATLAB实现FA-ELM萤火虫算法优化极限学习机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现FA-ELM萤火虫算法优化极限学习机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现FA-ELM萤火虫算法优化极限学习机多输入单输出回归预测(多指标,多图)效果一览基本介绍…

web、HTTP协议

目录 一、Web基础 1.1 HTML概述 1.1.1 HTML的文件结构 1.2 HTML中的部分基本标签 1.3 URI 和 URL 二.HTTP协议 2.1.HTTP概念 2.2.HTTP协议版本 2.3.HTTP请求方法 2.4.HTTP请求访问的完整过程 2.5.HTTP状态码 2.6.HTTP请求报文和响应报文 2.7.HTTP连接优化 三.HTT…

深入了解fcntl函数:Linux系统编程中的文件控制

文章目录 概述介绍函数原型与参数 拓展:fcntl改文件属性总结 概述 摘要: fcntl函数是Linux系统编程中一个重要的函数,用于对文件描述符进行各种控制操作。本文将详细介绍fcntl函数的原型、各个参数的用法,以及阻塞和非阻塞模式切换的方法&am…

YARN资源管理框架论述

一、简介 为了实现一个Hadoop集群的集群共享、可伸缩性和可靠性,并消除早期MapReduce框架中的JobTracker性能瓶颈,开源社区引入了统一的资源管理框架YARN。 YARN是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离&…

Spring Boot 整合MyBatis(超详细)

😀前言 本篇博文关于Spring Boot 整合MyBatis,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力&#x…

前端console.log打印内容与后端请求返回数据不一致

后端传值num0 前端打印num1 ,如图,console.log后台显示的数据与展开后不一致 造成该问题原因是深拷贝与浅拷贝的问题。 var obj JSON.parse(JSON.stringify(res)) 修改后打印 正常

Linux:LAMP架构与论坛搭建

目录 一、动态资源与语言 二、LAMP 架构的组成 三、CGI和astcgi 3.1CGI​​​​​​ 3.2fastcgi 3.3CGI和fastcgi比较 3.4 PHP 配置 3.5 Opcode语言 四、编译安装Apache http 服务 五、安装论坛 一、动态资源与语言 WEB 资源类型: 静态资源:原…

xsschallenge通关(1-10)

文章目录 level1level 2level 3level 4level 5level 6level 7level 8level9level 10 level1 这一关很简单&#xff0c;标准的xss注入&#xff0c;打开hackbar&#xff0c;输入 <script>alert(/xss/)</script>点击EXECUTE&#xff0c;通关&#xff01; level 2 这…

Unity 应用消息中心-MessageCenter

Ps&#xff1a;主要解决耦合问题&#xff0c;把脚本之间的联系通过不同消息类型事件形式进行贯通 1.MessageCenter主脚本 2.DelegateEvent消息类型脚本 3.MC_Default_Data具体接收类脚本 using System; using System.Collections; using System.Collections.Generic; using …

【具身智能】论文系列解读-RL-ViGen

1. RL-ViGen&#xff1a;视觉泛化的强化学习基准 RL-ViGen: A Reinforcement Learning Benchmark for Visual Generalization 0 摘要与总结 视觉强化学习&#xff08;Visual RL&#xff09;与高维观察相结合&#xff0c;一直面临着分布外泛化的长期挑战。尽管重点关注旨在解…

mysql 存储引擎系列 (二) Innodb 存储引擎 和 myisam 存储引擎

InnoDB 引擎 支持外键InnoDB是MySQL默认事务型引擎&#xff0c;它被设计用来处理大量的短期事务。可以确保事务的完整提交&#xff08;commit&#xff09;和回滚&#xff08;Rollback&#xff09;增加和查询&#xff0c;且数据量少的&#xff0c;MyIsam 高效&#xff0c; 除了…

Java“牵手”1688商品跨境属性数据,1688API接口申请指南

1688平台商品详情跨境属性数据接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取1688商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片&#xff0c;重量&#xff0c;详情描述等详细信息 。 获取商品详情接口API是一种用于…

私域流量的本质是什么?

私域流量的本质可以总结为以下几点&#xff1a; ①用户拥有权: 私域流量的关键是企业拥有对用户数据和互动的掌控权 ②长期价值: 建立持久的、互惠的关系&#xff0c;以便长期吸引、留住客户&#xff0c;并不断提高他们的价值。这与公域流量通常更侧重于短期转化的特性不同。…

双指针算法,基础算法实践,基本的算法的思想,双指针算法的实现

一&#xff0c;定义 双指针算法是一种常用于解决数组和链表问题的算法技巧。它的核心思想是使用两个指针在数据结构中按照一定的规则移动&#xff0c;从而达到快速搜索或处理数据的目的。这个技巧通常用于优化算法&#xff0c;降低时间复杂度&#xff0c;提高程序的执行效率。…