• RSA关于加密长度限制的解决办法


    RSA关于加密长度限制的解决办法
     
    因为rsa采用分块进行加密的,所以有长度限制.如果加密信息较多,可分段加解密(不建议对大量信息rsa加密,效率低效):
    正常加密情形如下:
         public static String encrypt(String source, String publicKey)
                     throws Exception {
               Key key getPublicKey(publicKey);
                /** 得到Cipher对象来实现对源数据的RSA加密 */
               Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
                cipher.init(Cipher. ENCRYPT_MODE, key);
                byte[] b = source.getBytes();
                /** 执行加密操作 */
                byte[] b1 = cipher.doFinal( b);
                return new String(Base64. encodeBase64(b1),"UTF-8");
         }
     
    分段加密如下:
      public static byte[] encryptByPublicKey( byte[] data, String publicKeyStr) throws Exception
        {
            PublicKey publicKey = RSAEncrypt.loadPublicKeyByStr(publicKeyStr);
            Cipher cipher = null;
            // 使用默认RSA
            cipher = Cipher.getInstance("RSA" );
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            int inputLen = data.length;
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            int offSet = 0;
            byte[] cache;
            int i = 0;
            // 对数据分段加密
            while (inputLen - offSet > 0)
            {
                if ( inputLen - offSet > MAX_ENCRYPT_BLOCK)
                {
                    cache = cipher.doFinal( data, offSet, MAX_ENCRYPT_BLOCK);
                }
                else
                {
                    cache = cipher.doFinal( data, offSet, inputLen - offSet);
                }
                out.write( cache, 0, cache. length);
                i++;
                offSet = i * MAX_ENCRYPT_BLOCK;
            }
            byte[] encryptedData = out.toByteArray();
            out.close();
            return encryptedData;
        }
    即把超过117(加密)和128(解密)长度的原文内容分割成多个部分,依次加解密,再合并.
    参考下面文件
     
    ApiAbstractResource.java
  • 相关阅读:
    Lucene简介
    网页去重和网页反作弊
    一个不应该犯的错octave
    使用有道笔记
    向量操作的思想
    暗时间(介绍)-关于坚持的一个故事
    bootstrap插件学习-bootstrap.tab.js(读码)
    Bootstrap 实现CRUD示例及代码
    Bootstrap Table 使用示例及代码
    Bootstrap Table相关参数及属性、方法
  • 原文地址:https://www.cnblogs.com/hupu-jr/p/7559879.html
Copyright © 2020-2023  润新知