我基本上有完全相反的问题

new-line-appending-on-my-encrypted-string

似乎旧的Java Base64实用程序在返回字符串时总是会每76个字符添加新行,但是使用以下代码,我没有得到所需的中断。

    Path path = Paths.get(file);
    byte[] data = Files.readAllBytes(path);
    String txt= Base64.getEncoder().encodeToString(data);


有没有简单的方法告诉编码器添加换行符?

我尝试实现一个stringbuilder来插入换行符,但是最终改变了整个输出(我将文本从Java控制台复制到HxD编辑器,并与换行符与已知的工作'BLOB'比较)。

    String txt= Base64.getEncoder().encodeToString(data);

    //Byte code for newline
    byte b1 = 0x0D;
    byte b2 = 0x0A;

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < txt.length(); i++) {
        if (i > 0 && (i % 76 == 0)) {
            sb.append((char)b1);
            sb.append((char)b2);

        }

        sb.append(txt.charAt(i));
    }


编辑(回答问题):

这不是最简单的解释,但是当我不使用字符串生成器时,编码的输出将像这样开始:

AAAAPAog4lBVgGJrT2b + mQVicHN3d //////// 3hhcDJiLWVtMjUwLWVtMjUwLWRldjA0NTUAAAAAAA

但我希望它看起来像这样:

AAAAPAog4lBVgGJrT2b + mQVicHN3d //////// 3hhcDJiLWVtMjUwLWVtMjUwLWRldjA0NTUAAAAA..AA

如您所见,“ ..”代表0x0D和0X0A或换行符,在第76个字符处插入(这是旧base64的输出)。

但是,当我在第76个字符后附加字节b1和b2(换行符)时,输出变为:

BPwAFHwA0CUFoG8AgDRCAAIlQgAAJUIAAhUfNEIAAiUkmw / 0fADQFSInART / ADUlfADQFQE0fADQ ..

因此,看起来“ ..”位于正确的位置,但之前的所有内容都不相同。

谢谢!

最佳答案

您需要getMimeEncoder代替:


  哑剧
  
  使用RFC 2045的表1中指定的“ Base64字母”进行编码和解码操作。编码后的输出必须以不超过76个字符的行表示,并使用回车符'\ r',然后紧跟换行符'\ n'作为行分隔符。没有行分隔符添加到编码的输出的末尾。在base64字母表中找不到的所有行分隔符或其他字符在解码操作中将被忽略。


(强调我的)

请注意,编码方案在其他方面与getEncoder中的基本编码器相同-它们都源自RFC 2045。

关于java - Java 8 Base64编码(基本)不再添加新行。我该如何重新实现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30961979/

10-11 22:28
查看更多