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

RSA非对称加密算法解析:密钥、明文及密文长度的约定--以及使用RSA算法实现登录时的前后端的加解密 1、RSA算法基础 RSA算法是一种非对称加密算法,非对称即:加解密用的不是同一个秘钥,它有一对秘钥,分为公钥和私钥。公钥加密,一般是客户端进行处理;私钥解密,一般是后端处理。公钥要暴露给加密方使用,私钥则要藏起来,一般由服务器管理。 1.1关于秘钥长度 一般来说,我们默认使用或常用的秘钥长度值是1024bit位,即1024/8=128byte,目前主流可选值:1024、2048、3072、... 阅读详情

今天在做RSA加密的时候遇到了一个这样的错误:ArrayIndexOutOfBoundsException: too much data for RSA block

查询相关资料后得知该错误是加密数据过长导致的。

加密数据长度 <= 模长-11

解决办法:将要加密的数据截取后分段加密

 

下面是关于RSA算法密钥长度/密文长度/明文长度的介绍

本文转自:http://blog.sina.com.cn/s/blog_76550fd7010147tp.html

1.密钥长度
rsa算法初始化的时候一般要填入密钥长度,在96-1024bits间
(1)为啥下限是96bits(12bytes)?因为加密1byte的明文,需要至少1+11=12bytes的密钥(不懂?看下面的明文长度),低于下限96bits时,一个byte都加密不了,当然没意义啦
(2)为啥上限是1024(128bytes)?这是算法本身决定的...当然如果某天网上出现了支持2048bits长的密钥的rsa算法时,你当我废话吧

2.明文长度
明文长度(bytes) <= 密钥长度(bytes)-11.这样的话,对于上限密钥长度1024bits能加密的明文上限就是117bytes了.
这个规定很狗血,所以就出现了分片加密,网上很流行这个版本.很简单,如果明文长度大于那个最大明文长度了,我就分片吧,保证每片都别超过那个值就是了.
片数=(明文长度(bytes)/(密钥长度(bytes)-11))的整数部分+1,就是不满一片的按一片算

3.密文长度
对,就是这个充满了谣言,都说密文长度为密钥长度的一半,经俺验证,密文长度等于密钥长度.当然这是不分片情况下的.
分片后,密文长度=密钥长度*片数

例如96bits的密钥,明文4bytes
每片明文长度=96/8-11=1byte,片数=4,密文长度=96/8*4=48bytes

又例如128bits的密钥,明文8bytes
每片明文长度=128/8-11=5bytes,片数=8/5取整+1=2,密文长度=128/8*2=32

注意,对于指定长度的明文,其密文长度与密钥长度非正比关系.如4bytes的明文,在最短密钥96bites是,密文长度48bytes,128bits米密钥时,密文长度为16bytes,1024bits密钥时,密文长度128bytes.
因为分片越多,密文长度显然会变大,所以有人说,那就一直用1024bits的密钥吧...拜托,现在的机器算1024bits的密钥还是要点时间滴,别以为你的cpu很牛逼...那么选个什么值比较合适呢?个人认为是600bits,因为我们对于一个字符串的加密,一般不是直接加密,而是将字符串hash 后,对hash值加密.现在的hash值一般都是4bytes,很少有8bytes,几十年内应该也不会超过64bytes.那就用64bytes算吧, 密钥长度就是(64+11)*8=600bits了.

用开源rsa算法的时候,还要注意,那个年代的人把long当4bytes用,如今放在64位的机器上,就会死循环啊多悲催....因为有个循环里让一个4bytes做递减....64位机上long是8bytes,这个循环进去后个把小时都出不来....所以要注意下哦....同理对于所有年代久远的开源库都得注意下...

java HMAC 加密 AES RSA 加密解密代码 HMAC 加密算法 import java.nio.charset.StandardCharsets; import javax.crypto.KeyGenerator; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.DecoderException; import org.apache.common 阅读详情

相关推荐

RSA算法C++实现:从数学原理到工程实践的安全加密指南

非对称加密是现代信息安全体系的基石,其核心原理基于单向数学函数的计算难度,确保数据在公开信道中传输的机密性与完整性。RSA算法作为最经典的非对称加密方案,其安全性依赖于大整数质因数分解的困难性,通过公钥与私钥的配对实现加密与解密。在工程实践中,RSA不仅用于HTTPS、SSH等安全协议,还广泛应用于数字签名与密钥交换场景。本文以C++为例,深入剖析RSA的密钥生成、模幂运算与填充机制,并重点探讨如何通过米勒-拉宾素性检验生成大质数,以及使用扩展欧几里得算法计算模逆元,为开发者提供从理论到代码的完整实现路径。

weixin_30279315的博客 451

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

Go语言RSA加解密全解析:从原理到生产级实现与架构师能力映射

非对称加密是现代信息安全体系的基石,它通过公钥与私钥的配对,解决了密钥分发与安全通信的核心难题。其数学原理基于大整数分解等计算复杂性理论,确保了即使公开加密密钥,也无法逆向推导出解密密钥。在工程实践中,RSA算法因其可靠性和标准化,成为构建HTTPS、数字签名、密钥交换等安全协议的关键技术,广泛应用于金融支付、身份认证、数据加密等对安全性要求极高的场景。理解RSA的实现细节,如PKCS#1、OAEP等填充方案的区别,以及PEM、PKCS#8等密钥格式的处理,是开发高安全、高可靠分布式系统的必备技能。本文以G

weixin_34216107的博客 371

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

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

539

Go语言加密库封装实战:从AES、RSA到混合加密系统设计

加密技术是保障数据安全的基石,其核心原理在于通过特定算法将明文转换为不可读的密文。对称加密算法如AES,使用同一密钥进行加解密,效率高,适合大数据量场景;非对称加密算法如RSA,采用公钥私钥对,解决了密钥分发难题,但计算成本较高。在工程实践中,直接使用标准库提供的加密原语存在误用风险,例如不当的初始化向量(IV)处理或填充模式选择可能导致严重安全漏洞。因此,构建一套统一的、高可用的加密基础设施至关重要,它能整合多种算法,提供安全的默认参数和一致的API,从而简化开发并提升系统安全性。本文聚焦于Go语言环境,

weixin_30627341的博客 373

Java增强型RSA工具类实战:解决长文本、多格式密钥与性能优化

非对称加密是信息安全领域的核心技术,通过公钥与私钥的配对实现数据加密与身份验证。RSA作为经典的非对称算法,其原理基于大数分解的数学难题,在数据传输、数字签名等场景中保障通信安全。在实际工程应用中,开发者常面临明文长度限制、密钥格式兼容性差、性能瓶颈等挑战。本文聚焦于**长文本处理**与**密钥格式解析**两大核心痛点,通过分段加密策略与多格式密钥自动识别机制,构建了一个开箱即用、安全可靠的增强型RSA工具类。该方案不仅提升了开发效率,还通过Cipher实例复用等优化手段,有效支撑了高并发场景下的稳定运行。

weixin_34221112的博客 372

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

http://blog.csdn.net/defonds/article/details/42775183 Java 进行 RSA 加解密时不得不考虑到的那些事儿 标签: Java加解密RSA加解密安全加密数据安全加解密须知 2015-01-16 11:56 20269人阅读 评论(10) 收藏 举报 分类: 安全防御(11)

leiwuxing的专栏 942

Java实现经典加密算法:从AES、DES到RSA与哈希函数的底层原理与实践

加密算法是信息安全领域的基石,其核心原理在于通过数学变换保护数据的机密性、完整性与真实性。对称加密算法如AES和DES,基于共享密钥和分组密码结构,通过多轮置换与混淆操作实现高效的数据加密,广泛应用于大量数据的快速加密场景。哈希函数如MD5和SHA1,则通过单向压缩生成固定长度的数字指纹,确保数据完整性,常用于密码存储与校验。非对称加密算法如RSA,利用大数分解难题和公私钥对,解决了密钥分发问题,是数字签名与安全通信的关键。理解这些算法的底层实现,例如**Feistel网络**结构和**S-Box替换**机

weixin_30522183的博客 406

java中RSA加解密的实现

今天在做RSA加密的时候遇到了一个这样的错误:ArrayIndexOutOfBoundsException: too much data for RSA block 查询相关资料后得知该错误是加密数据过长导致的。 加密数据长度 解决办法:将要加密的数据截取后分段加密 下面是关于RSA算法密钥长度/密文长度/明文长度的介绍 1.密钥长度 rsa算法初始化的时候一般要填入密钥长度,在96

layman1024的博客 770

AES/CBC/ZeroPadding加解密原理与增强型实现详解

对称加密是保障数据机密性的核心技术,其核心原理在于使用同一密钥进行加密和解密,确保数据传输和存储的安全。AES作为国际标准算法,凭借其公开性和硬件加速支持,成为对称加密的基石。CBC工作模式通过引入初始化向量和链式结构,有效解决了ECB模式下的模式泄露问题,提升了安全性。在实际工程中,分组加密算法要求数据长度对齐,因此填充方案至关重要。ZeroPadding作为一种常见的填充方式,因其兼容性要求,在嵌入式系统等特定场景中仍有应用。本文针对ZeroPadding的缺陷,提出了一种增强型实现方案,通过添加长度头

congsong2560的博客 558

H5与小程序RSA加密实战:解决超长内容与中文乱码

在Web前端开发中,数据安全传输是保障用户隐私和业务合规的核心环节。非对称加密算法RSA因其公钥可公开、私钥私有的特性,常被用于前端敏感数据加密。其原理基于大数分解的数学难题,前端使用公钥加密,后端使用私钥解密,确保传输过程即使被拦截也无法破解。然而,RSA算法存在加密长度限制,且不同JavaScript运行环境(如浏览器与小程序沙盒)对字符串编码的处理存在差异,直接应用易引发“数据过长”错误和“中文字符乱码”问题。这要求开发者在工程实践中,必须采用分段加密策略并强制统一编码(如UTF-8),以构建跨平台一

weixin_33804582的博客 438

java中RSA分段加解密与加签验签

背景 RSA加密明文最大长度117字节,解密要求密文最大长度为128字节,所以过长数据在加密和解密的过程中需要分块进行。 RSA加密对明文的长度是有限制的,如果加密数据过大会抛出如下异常: Exception in thread “main” javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 b...

weixin_30402343的博客 308

Android加密开发实战:Spongy Castle集成、国密算法与性能优化指南

在移动应用开发中,数据加密是保障用户隐私和信息安全的基石。其核心原理是通过密码学算法对数据进行转换,确保只有授权方才能访问原始内容。这项技术的价值在于为敏感数据(如登录凭证、支付信息)提供机密性、完整性和认证性,是金融、社交、企业应用等场景的必备能力。然而,Android平台内置的加密库存在算法支持不全和版本兼容性问题,例如缺乏国密算法(SM2/SM3/SM4)支持,且旧系统上高级模式(如AES-GCM)可能不可用。这促使开发者寻求更强大的解决方案。Spongy Castle作为Bouncy Castle的

weixin_30553777的博客 417

Go语言RSA加密解密实战:从原理到工程化实现

非对称加密是现代信息安全体系的基石,其核心原理基于大数分解等数学难题,通过公钥与私钥的配对实现数据加密和身份验证。RSA作为最经典的非对称加密算法,其技术价值在于为安全通信、数字签名和密钥交换提供了可靠保障,广泛应用于HTTPS、API接口认证、敏感数据加密等场景。在工程实践中,**Go语言**凭借其简洁的语法和强大的标准库,成为实现RSA算法的理想选择。通过`crypto/rsa`和`crypto/rand`等库,开发者可以安全地生成**RSA密钥对**,并实现PKCS#1 v1.5与更安全的OAEP填充

深未来技术 469

RSA加密解密签名(密钥任意长度)

java通用加密解密。安卓通用必须要另外下载包。注意必须GBK字符集转换。

FUEL算法解读(一)——框架解读,思维导图可以很清晰看懂算法启动框架,已更新完,图太大放不上来链接在文末

一图看懂FUEL算法节点框架!!!

weixin_43793717的博客 2783
上一篇: android EditText获取光标位置并插入字符删除字符
下一篇: java中RSA加解密的实现
Central-Perk
博客等级 码龄16年 473粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值