RSA 解密的时候报错 而且有乱码:java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block

银河麒麟操作系统最佳实践专栏介绍 本专栏聚焦国产银河麒麟操作系统(桌面版/服务器版)的实战应用,提供系统安装、配置优化、应用部署、故障排查等实用指南。内容基于真实操作场景,涵盖Linux通用技术(如RAID配置、环境变量管理)、服务器系统专项(如数据库迁移、驱动安装、安全加固)及桌面系统技巧(如PXE安装、镜像封装)。面向IT运维、开发者和国产化转型人员,突出实战性和差异化,帮助用户规避常见问题,提升系统管理效率。所有教程均配有详细步骤和截图,确保可操作性,并持续更新适配新版系统。 阅读详情


报错:

03-22 10:21:20.805 507-507/? E/AndroidRuntime: FATAL EXCEPTION: main

03-22 10:21:20.805 507-507/? E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{tech.androidstudio.encodecryp/tech.androidstudio.encodecryp.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:99)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:123)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:3683)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:507)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:  Caused by: java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at org.bouncycastle.jce.provider.JCERSACipher.engineDoFinal(JCERSACipher.java:449)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at javax.crypto.Cipher.doFinal(Cipher.java:1090)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at tech.androidstudio.encodecryp.CryptUtil.rsaDecrypt(CryptUtil.java:75)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at tech.androidstudio.encodecryp.MainActivity.rsaTest(MainActivity.java:154)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at tech.androidstudio.encodecryp.MainActivity.onCreate(MainActivity.java:36)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:99) 
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:123) 
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:3683) 
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method) 
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:507) 
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 

03-22 10:21:20.805 507-507/? E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method) 


原因:第二个问题也是由第一个乱码的问题引起的:

代码:

    public void rsaTest(){
        String data = "Hello, Kodulf is a good father, 千雅爸爸是个好爸爸";
        byte[] bytes = data.getBytes();
        byte[] encryptByte = CryptUtil.rsaEncrypt(bytes, mPrivate);
                String encryptString = new String(encryptByte);//这里产生乱码

        Log.d("kodulf","Hello, Kodulf is a good father, 千雅爸爸是个好爸爸 加密后:"+encryptString);

        //解密:
        byte[] sourceBytes = encryptString.getBytes();//这里会报错java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
        byte[] decryptBytes = CryptUtil.rsaDecrypt(sourceBytes, mPublic);
        String decryptString = new String(decryptBytes);
        Log.d("kodulf","Hello, Kodulf is a good father, 千雅爸爸是个好爸爸 解密后:"+decryptString);
    }

获取的时候直接就将数据输出了,而没有通过Base64来进行处理,如果通过Base64来进行处理了,就不会显示乱码,Base64 也就是将非Ascii的码变成可以读取的字符


解决办法:

添加Base64到代码里面,如下:

public void rsaTest(){
        String data = "Hello, Kodulf is a good father, 千雅爸爸是个好爸爸";
        byte[] bytes = data.getBytes();
        byte[] encryptByte = CryptUtil.rsaEncrypt(bytes, mPrivate);

        //要使用Base64来进行编码,如果不这样做就会显示乱码
        //String encryptString = new String(encryptByte);//这里产生乱码
        String encryptString = Base64.encodeToString(encryptByte, Base64.NO_WRAP);

        Log.d("kodulf","Hello, Kodulf is a good father, 千雅爸爸是个好爸爸 加密后:"+encryptString);

        //解密:
        //要使用Base64来进行解码,如果不这样做就会显示乱码
        //byte[] sourceBytes = encryptString.getBytes();//这里会报错java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
        byte[] sourceBytes = Base64.decode(encryptString.getBytes(), Base64.NO_WRAP);
        byte[] decryptBytes = CryptUtil.rsaDecrypt(sourceBytes, mPublic);
        String decryptString = new String(decryptBytes);
        Log.d("kodulf","Hello, Kodulf is a good father, 千雅爸爸是个好爸爸 解密后:"+decryptString);
    }



[Dify] 实现“多知识库切换”功能的最佳实践 知识库切换是提升AI问答系统精准度的关键技术。本文介绍了Dify平台实现多知识库切换的三种方式:静态配置、元数据过滤和动态切换,分析了各自的优缺点。最佳实践建议包括:合理分库设计、意图分类、主库优先检索等。文章还提供了示例工作流程和注意事项,帮助构建更智能、精准的知识驱动型问答系统。通过合理切换知识库,可显著提升回答相关性和系统性能。 阅读详情

相关推荐

Vitis Model Composer闪退?手把手教你用命令行启动Vivado 2021后的System Generator

本文详细解析了Vitis Model Composer闪退问题的根本原因,并提供了命令行启动Vivado 2021后System Generator的完整解决方案。从环境变量配置、组件缺失排查到权限问题处理,手把手教你通过命令行深度排错,并分享高级自动化脚本和系统优化技巧,帮助开发者高效使用Vitis Model Composer与System Generator进行HDL开发。

weixin_26905487的博客 348

too much data for RSA block .关于RSA算法密钥长度/密文长度/明文长度

今天在做RSA加密的时候遇到了一个这样的错误:ArrayIndexOutOfBoundsException: too much data for RSA block 查询相关资料后得知该错误是加密数据过长导致的。 加密数据长度 <= 模长-11 解决办法:将要加密的数据截取后分段加密 下面是关于RSA算法密钥长度/密文长度/明文长度的介绍 本文转自:http://blog.si...

www.jiav.net技术网站的加盟博客 1635

别再手动上传了!用宝塔面板的‘Let‘s Encrypt’免费SSL证书,3分钟自动续期

本文详细介绍了如何利用宝塔面板的‘Let‘s Encrypt’功能实现SSL证书的自动申请和续期,3分钟完成配置即可永久免费使用。通过对比不同SSL证书方案,突出Let's Encrypt的免费、自动续期和高安全性优势,特别适合个人博客和中小企业官网。

weixin_30415113的博客 150

RSA加密too much data for RSA block

RSA加密时报错:java.lang.ArrayIndexOutOfBoundsException: too much data for RSA bloc: 按照下面顺序先后进行: 1.RSA加密 2.Base64编码: String password_front_end = Base64.getEncoder().encodeToString(encodeData); 3.Base64解...

aoeace 6677

切比雪夫插值

切比雪夫插值是一种基于切比雪夫节点的多项式插值方法,其优势是减少插值误差(特别是龙格现象:表现为高维插值时在边缘处插值误差骤增)。本文对其基本操作进行说明。

平和少年的博客 1647

CRaxsRat v7.6 安装与使用教程(附工具下载)

摘要:本文介绍远程管理工具CRaxsRat v7.6的合法应用与基本操作,强调仅限授权环境使用。该工具支持多客户端管理、TLS加密及文件/进程控制等功能,适用于内网维护与安全测试。安装需Windows 10/11系统及.NET 4.8,步骤包括解压运行、配置监听端口及生成客户端。文中提醒防火墙设置与杀软误报问题,并重申禁止非法用途,建议在虚拟机或隔离环境学习使用。

lzj781210的博客 3791

Caused by: java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block

   前一阵子做应用内秘钥加密,用得RSA,加密没有问题,但是在解密阶段,直接就报错,关键的错误就是标题的这个错误。不明白为什么测试的时候没有问题,但是正是运行的时候有问题,认真看了一下报错,是说需要解密的RSA数据太大了。。其实解决方式很简单,就是在加密的时候对已经RSA加密的数据进行Base64加密,然后解密的时候先进行Base64解密,然后进行RSA解密。废话不多说,上RSAUtil关键代码...

viewgroup的博客 6855

多边形裁剪算法

多边形裁剪算法 刚参加工作就跟多边形刚上了,对于多边形的裁剪做一些简单的总结。 多边形裁剪主要有四种算法 Greiner-Hormann裁剪算法 Sutherland-Hodgman算法 Vatti裁剪算法 Weiler-Atherton裁剪算法 作为一名想要成为优秀算法工程师的程序员,我们不能只会使用,而不知道其原理,倘若如此,我们无法做到应用于本身业务上的定制化的修改。 Greiner–H...

papalqi 6729

java.lang.ArrayIndexOutOfBoundsException: 0 数组索引越界异常 怎么办……解决方法如下:

因此,在实际的应用中,我们通常要在访问数组元素之前做数组长度的检查。,则认为数据不完整,并继续处理下一行数据。这样就可以避免因为数据不完整而导致的数组越界异常。数组中的第一个和第二个元素分别进行了访问,而且在访问之前还没有做数组长度的检查。分析:我在百度上搜了很多方法,都没有明确表示这是怎么来的,应该怎么解决。数组的第一个和第二个元素。这样就避免了数组越界异常。问题描述:当我进行测试时,出现错误,这句话的意思是。这段代码本身并没有明显的数组索引越界异常,因为它对。在这个修改后的代码中,我们首先检查了。

2201_75806156的博客 2274

AutoSAR MemMap模块概述及配置参数详解

这个模块是干啥的?它是用来配置Memory Mapping and Compiler Abstraction module。

4508

AFL源码分析之afl-as.c详细注释

前言 afl-as注释好了,明白了是如何进行插桩的,以及插在哪里 本文主要参考Sakura大佬文章:https://eternalsakura13.com/2020/08/23/afl/ 编写不易,如果能够帮助到你,希望能够点赞收藏加关注哦Thanks♪(・ω・)ノ /* Copyright 2013 Google LLC All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); y

hollk’s blog 2172

异常:java.lang.ArrayIndexOutOfBoundsException

java.lang.ArrayIndexOutOfBoundsException: 一种运行时异常,常出现在数组下标越界中,称为下标出界异常 代码演示: 下面异常报错,就是因为我的数组arr只能有arr[0],arr[1]两个元素,而我的循环中多插入了,所以出现了下标越界,而这是运行时异常,需要用户自己解决,所以我们有两种处理方法: 两种解决方式就可以消除异常 ...

m0_64838208的博客 5万+

基于Simulink的电动汽车动力总成控制策略验证与标定仿真平台

电动汽车的动力总成(Powertrain)是车辆的核心系统,包括动力电池、电机控制器、逆变器和驱动电机等关键部件。动力总成的控制策略直接影响车辆的动力性能、能耗效率和驾驶体验。为了验证和优化这些控制策略,基于MATLAB/Simulink的仿真平台成为一种高效且经济的解决方案。本项目旨在构建一个完整的基于Simulink的电动汽车动力总成控制策略验证与标定仿真平台,涵盖控制策略建模、性能评估以及参数标定等功能模块,并通过仿真验证系统的有效性。

xiaoheshang_123的博客 177

RSA解密中文乱码解决,前端加密后端解密

var name = '中文测试' var nameen = encodeURIComponent(name); var name = encrypt.encrypt(nameen); 先用encodeURIComponent() 加密,再用rsa加密 后台解密: 先rsa解密,再用 URLDecoder.decode() 解密 String name2 = RSACoderUtil.decryptByPrivateKey(name); ...

weixin_46305078的博客 2885

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java.lang.ArrayIndexOutOfBoundsException: 1 字符串分割数组越界,报错为1

在学习idea清洗数据写入数据到数据库中,每一行的数据都会写入到数据库Navicat Premium 16,报错是数组越界,但数组确实没有越界。java.lang.ArrayIndexOutOfBoundsException: 1 分割字符串出现数据越界异常,报错为1.删除最后一行的三个顿号并保存然后运行。希望有相似问题的小伙伴能看到。分析字符串长度在最后一行长度为3。

cx3543083541的博客 2246

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

RSA加密 too much data for RSA block

场景:RSA加密 //RSA加密 这样处理 byte [] bytes =ci.doFinal(data.getBytes(StandardCharsets.UTF_8)); return Base64.getEncoder().encodeToString(bytes); //解密时这样处理 byte [] bytes = ci.doFinal(Base64.getDecoder(...

2094

too much data for RSA block

http://objectmix.com/java/76634-too-much-data-rsa-block.html   Hallo, i have a problem with my RSA implementation in Java... if i have a string which is no longer then 64 Signs is there any prob

guolong1983811的专栏 5375

RSA非对称加密提示

使用私钥解密时,报错:algid parse error, not a sequence 提示:私钥需要先转PKCS8格式 /** * * @param str 需解密的字符串 * @param privateKey 私钥 * @return * @throws Exception */ public static String decrypt(String str, String privateKey) throws Exception

Yourisa的博客 460

Too much data for RSA block fail. What is PKCS#7?

http://stackoverflow.com/questions/2579103/too-much-data-for-rsa-block-fail-what-is-pkcs7     Talking about javax.crypto.Cipher I was trying to encrypt data using Cipher.getInstance("R

guolong1983811的专栏 1392

RSA解密过程中遇到的报错

报错:org.bouncycastle.crypto.DataLengthException: input too large for RSA cipher.问题所在:没留意被解密的报文是“content=XXX”,应该是“XXX”的解决办法:把接收的报文过滤掉“content=”就行;--------------------------------------------------------...

jim_007的博客 1万+

Java的bouncycastle密码库的RSA的加密,解密,类

import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; import org.bouncycastle.crypto.generators.*; import org.bouncycastle.crypto.params.*; import org.bouncycastle.crypto.*; import org.bouncycastle...

a571574085的博客 7474

rsa加密前后端分段解密出现中文部分乱码解决方法

之前被rsa分段解码中文部分乱码困扰了好久,因为前端rsa 分段解密的时候汉字字节代表3个字节,在解密最大长度分界如果3个字节被分隔成了两段转成string就会乱码了

m0_64512327的博客 6546

Java 进行 RSA 加解密时不得不考虑到的那些事儿

1. 加密的系统不要具备解密的功能,否则 RSA 可能不太合适公钥加密,私钥解密。加密的系统和解密的系统分开部署,加密的系统不应该同时具备解密的功能,这样即使黑客攻破了加密系统,他拿到的也只是一堆无法破解的密文数据。否则的话,你就要考虑你的场景是否有必要用 RSA 了。2. 可以通过修改生成密钥的长度来调整密文长度生成密文的长度等于密钥长度。密钥长度越大,生成密文的长度也就越大,加密的速度也就越慢

Defonds 的专栏 12万+

RSA解密出现乱码的问题

当RSA解密是后经常会出现乱码、或者是badpadding或者是mustsatrtzero的问题,下边我就给大家解释结局一个乱码的问题,其他的都好说, mustsatrtzero的问题无非就是你加密之后会有”+“号,拼参数访问的时候浏览器会将”+“自动转化为空格 badpadding就是你加密的时候出现的问题,这个问题得看详细的问题 ,这里就不赘述了 乱码这个问题真的是困扰了我好久,因为是对...

半吊子的博客 1万+

java rsa 解密 乱码_java中rsa乱码介绍

在对安全性要求比较高的报文做加密的时候,算法有很多种,我这里主要用到的就是AES加密算法。由于在国内使用,所以不可避免的要对中文进行加密和解密,而在这个过程中,发现,如果不做处理,很容易会出现中文乱码。(推荐:java视频教程)下面是常见的情况:一、中文乱码不对密码进行编码处理byte[] decryptResult = decrypt(encryptResult, password);Syste...

weixin_33657090的博客 1999

java rsa 解密 乱码_解决.net 解密Java Rsa 乱码问题

usingSystem;usingSystem.IO;usingSystem.Security.Cryptography;usingSystem.Text;public classRSAFromPkc8{/// ///签名/// /// 待签名字符串/// 私钥/// 编码格式/// 签名后字符串public static string sign(string content, string pr...

weixin_39874196的博客 738
上一篇: Android 中的URLEncoder和URLDecoder
下一篇: Android 中MD5算法生成字符串
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值