代码之家  ›  专栏  ›  技术社区  ›  NullPointerException

编码字符串是否有最大base64大小?

  •  1
  • NullPointerException  · 技术社区  · 5 年前

    我使用Base64来编码一个包含数千个数据的巨大json字符串,编码后我将其存储在磁盘上。稍后,我将再次从磁盘检索并将其解码为可读的普通字符串json。

    public static String encryptString(String string) {     
        byte[] bytesEncoded = Base64.getMimeEncoder().encode(string.getBytes());
        return (new String(bytesEncoded));
    }
    
    public static String decryptString(String string) {
        byte[] bytesDecoded = Base64.getMimeDecoder().decode(string);
        return (new String(bytesDecoded));
    }
    

    Base64编码和解码函数的大小有限制吗?或者我能编码和解码超大字符串吗?

    谢谢您。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Pushkar Adhikari    5 年前

    没有最大尺寸,但我也想建议不同的方法 加密 解密

    public static String encrypt(String strClearText,String strKey) throws Exception{
        String strData="";
    
        try {
            SecretKeySpec skeyspec=new SecretKeySpec(strKey.getBytes(),"Blowfish");
            Cipher cipher=Cipher.getInstance("Blowfish");
            cipher.init(Cipher.ENCRYPT_MODE, skeyspec);
            String isoText = new String(strClearText.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); // there are shorthand ways of doing this, but this is for your explaination
            byte[] encrypted=cipher.doFinal(isoText.getBytes(StandardCharsets.ISO_8859_1));
            strData=Base64.getEncoder().encodeToString(encrypted);
    
        } catch (Exception e) {
            e.printStackTrace();
            throw new Exception(e);
        }
        return strData;
    }
    

    解密

    public static String decrypt(String strEncrypted,String strKey) throws Exception{
        String strData="";
    
        try {
            SecretKeySpec skeyspec=new SecretKeySpec(strKey.getBytes(),"Blowfish");
            Cipher cipher=Cipher.getInstance("Blowfish");
            cipher.init(Cipher.DECRYPT_MODE, skeyspec);
            byte[] decrypted=cipher.doFinal(Base64.getDecoder().decode(strEncrypted));
            isoStrData=new String(decrypted, StandardCharsets.ISO_8859_1);
            strData=new String(isoStrData.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
        } catch (Exception e) {
            e.printStackTrace();
            throw new Exception(e);
        }
        return strData;
    }
    

    在程序中,键始终可以是常量,但不建议这样做。