Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编码字符串是否有最大base64大小?_Java_String_Base64_Decode_Encode - Fatal编程技术网

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

Java 编码字符串是否有最大base64大小?,java,string,base64,decode,encode,Java,String,Base64,Decode,Encode,我使用Base64对一个包含数千个数据的巨大JSON字符串进行编码,编码后存储在磁盘上。稍后,我将再次从磁盘中检索并将其解码为可读的普通字符串JSON public static String encryptString(String string) { byte[] bytesEncoded = Base64.getMimeEncoder().encode(string.getBytes()); return (new String(bytesEncoded)); }

我使用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编码和解码函数的大小是否存在限制?或者我能对超大字符串进行编码和解码吗?

没有最大大小,但我还想建议不同的加密和解密方法

加密

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;
}

键在程序中可以始终是常量,但不建议使用。

否,除了在内存中存储所有这些字符所需的内存之外。但是Base64绝不是一种加密方法,也没有理由将方法命名为encryptString()并使用它。为什么不直接将JSON存储在磁盘上?为什么要这样做?Base64是一种在文本中表示二进制数据的方法。因为您的源代码是文本,所以它没有用处。Base64不是加密。@JBNizet我需要以非人类可读的方式存储数据,因为它是个人数据,我曾尝试使用google Tink进行加密,但对于这个简单的操作来说太复杂了,在我使用jasypt之前,但现在它已被弃用,所以我选择将其编码为Base64。现在json以非人类可读的样式存储。您有一个更好的选择,它不像Tink?Base64那样超级复杂,是人类可读的。孩子们,任何剧本都可以接受、解码和阅读。脚本小子是人。如果您不想让它可读,请选择一个好的密码,使用正确的基于密码的加密算法从该密码派生出一个密钥,然后对其进行加密。在更大的上下文中,如果您最终保存泄漏或访问的Base64个人数据,则会使您程序的用户面临风险。所有数据都很重要cypher不赞成吗?我找不到任何这样的说法。你能提供链接吗?嗯,我不知道我在哪里读到过关于这个的东西,人们只是建议用谷歌Tink来加密而不是密码,不记得为什么了。可能是在java 9 10 11的新java模块系统中被删除了?顺便说一句,不要删除你的答案,我会在使用你的建议时考虑谢谢你什么是河豚?我该怎么称呼斯尔基呢?而
strkey
是一个加密密钥。成功解密需要与加密时提供的密钥相同的密钥。