首页 > 其他分享 >今天突然发现RSA对加密报文是有字数限制的TAT

今天突然发现RSA对加密报文是有字数限制的TAT

时间:2023-11-22 11:25:26浏览次数:25  
标签:TAT 加密 分段 int 报文 RSA hutool 长度

之前一直在用Hutool的RSA加密,从没碰到过字数限制问题,就也没仔细研究过RSA,hutool的好东西嘛都是开箱即用,主打一个能用就不细想(当然下面的事情说明要提升技术还是得多想想哈哈哈,不然碰到问题那是一脸懵)。

结果今天在和对接方沟通时,对方对着我提供的接口文档一顿捣鼓,接口入参需要进行RSA加密,我依旧是用hutool的RSA,但对方没有用,并且可能也没RSA分段加密经验,于是向我抛出一个javax.crypto.IllegalBlockSizeException: input must be under 256 bytes,即加密报文长度不能超过256bytes。

我拿着报错一搜,很快啊,啪的就出来了一大堆分段加密相关文章,表示明文长度需要小于密钥长度,而密文长度则等于密钥长度。因此当加密内容长度大于密钥长度时,有效的RSA加解密就需要对内容进行分段。

看起来解决方法找到了,但我又有些疑惑为什么Hutoool的RSA任我传多长,它都岿然不动,毫不报错?莫非里面已经集成了分段加密?

我先查看了下Hutool的文档,里面只有使用方式,没提到这方面,于是又去看源码,顺着encryptBase64翻了五分钟,果然!hutool会先根据密钥拿到一个encryptBlockSize,再一路走到AsymmetricCrypto类的doFinal方法中,将加密报文长度与encryptBlockSize进行对比,决定是直接加密还是需要进行分段加密,最底层还是调的Cipher。

hutool里的分段加密主要代码:
    private byte[] doFinalWithBlock(byte[] data, int maxBlockSize) throws IllegalBlockSizeException, BadPaddingException, IOException {
        int dataLength = data.length;
        FastByteArrayOutputStream out = new FastByteArrayOutputStream();
        int offSet = 0;

        for(int remainLength = dataLength; remainLength > 0; remainLength = dataLength - offSet) {
            int blockSize = Math.min(remainLength, maxBlockSize);
            out.write(this.getCipher().doFinal(data, offSet, blockSize));
            offSet += blockSize;
        }

        return out.toByteArray();
    }

差不多搞懂了,但以后当然还是继续用Hutool的傻瓜式操作哈哈哈>v<

标签:TAT,加密,分段,int,报文,RSA,hutool,长度
From: https://www.cnblogs.com/yiyuzi/p/17848544.html

相关文章

  • 报错:Invalid bound statement (not found): com.ljxx.pts.dao.SitePriceMapper.select
    如果你是Mybatis的话请注意yml或者properties文件里面的组件扫描#指定mapper.xml的位置mybatis.mapperLocations=classpath*:mapper/**/*Mapper.xmlmybatis.configuration.map-underscore-to-camel-case=true注意:由于上面指定的是Mapper.xml,故xml文件不要携程Dao.xml......
  • centos:subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned n
    一、原因pytorch版本大于1.5二、解决1、降低pytorch版本将pytorch版本降到1.5以下2、禁用ninjiapytorch默认使用ninjia作为backend,将其禁用。替换为以下代码setup(...,cmdclass={#'build_ext':BuildExtension,'build_ext':BuildExtension.w......
  • 论文阅读:Few-shot 3D Point Cloud Semantic Segmentation
    摘要许多现有的3D点云语义分割方法是完全监督的。这些完全监督的方法严重依赖难以获得的大量标记的训练数据,并且在训练后不能分割新的类别。为了缓解这些局限性,我们提出了一种新颖的注意力感知的多原型过渡性小样本点云语义分割方法,以分割给定的少数标记的例子的新类别。具体来说,每......
  • RSA详解
    35.RSA查看题目类型:n+e+c+p+q=m+公钥提取把两个文件后缀都改成txt(我是把第一个文件改成了flagenc.txt)明显pub.txt是一个公钥解析再用分解N得到q,p明显q,p是十进制的得到D写脚本importrsae=65537n=8693448229604811919066606200349480058890565601720302561721665405837......
  • RSA
    查看题目类型:n+e+c+p+q=me=65537p=9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483q=118748438379802970320924058486536568527609101545433809076500401......
  • static
     static:叫静态,可以修饰成员变量,成员方法。类变量:属于类,与类一起加载一次,在内存中只有一份,可以被类和类的所有对象共享。实例变量:属于对象,每个对象中都有一份,只能用对象访问。 ......
  • RSA算法基础
    RSA算法的必要性密码学是一门保密通信技术,它将明文信息按双方约定的法则转换成只有特定人群才能看懂的密文以保证信息的安全传输。这样即使接收者之外的人得到传递的密文,也不知道信息的真正内容,从而达到安全传递信息的目的。古典密码学和近代密码学一般是通过转译和反转译的方法......
  • 如何删除 Angular SSR 应用 State Transfer 嵌入到 HTML 里的某些字段
    笔者这篇文章介绍了AngularSSR应用StateTransfer的工作机制和错误排查方法。SSR服务器端发送给客户端response里包含的StateTransfer数据的一个例子如下:<scriptid="serverApp-state"type="application/json">...&q;headers&q;:{&q;date&q;:[&q;Fri,05Mar......
  • 罗德里格旋转公式(Rodrigues' rotation formula)
    https://zhuanlan.zhihu.com/p/115276808   ......
  • 关于 Angular Universal 应用渲染两次的问题
    AngularRepositoryurl:https://github.com/angular/angular-cli/issues/7477现象:Ibuiltasamplerepousingangular-cliandfollowedthestepsintheUniversalRenderingstorytoenableserversiderendering.Theapplicationloadswellonrunning,butIse......