java - 当我使用 AES 加密或解密文件时,文件末尾有奇怪的字符,这可能是缓冲区问题还是 AES 问题?

标签 java file encryption

我想加密一些数据,稍后再解密。当我这样做时,文件末尾会有奇怪的字符。

当它是一个小文件时,我试图修复缓冲区大小。但是当文件更大时,我假设缓冲区中有奇怪的值,这些值只是放入文件中,这些值没有被刷新或磁盘上的其他地方。 但是我不知道如何处理我不知道确切大小的非常大的文件。

在不超过我正在读/写的确切文件大小的情况下,我该怎么做才能拥有一个更动态的缓冲区?

    private static void writeBytes(FileInputStream fis, ByteArrayOutputStream baos, FileOutputStream fos, long inSize)
            throws IOException {
        InputStreamReader isr = new InputStreamReader(fis);
        int read = 0;
        int bufsize = inSize < 1024 ? Math.toIntExact(inSize) : 1024;
        byte[] buf = new byte[bufsize];

        while ((read = fis.read(buf)) > 0) {
            byte[] ret = buf;
            //I think i should make it here more dynamica because i only need 
            //the new read data
            rounds++;
            ret = startEncryption(ret, baos);
            fos.write(ret);

        }

        fos.flush();
        fos.close();
        fis.close();

    }

INPUTFILE.txt

Hello StackOverflow
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
Some more Values exceeding 1024 Bytes
Some more Values exceeding 1024 Bytes
Some more Values exceeding 1024 Bytes
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
Bye StackOverflow

先加密再解密

输出文件.txt

Hello StackOverflow
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
Some more Values exceeding 1024 Bytes
Some more Values exceeding 1024 Bytes
Some more Values exceeding 1024 Bytes
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
testvaluestestvaluestestvaluestestvaluestestvaluestestvalues
Bye StackOverflowAZØgZ—»:ÔU
ßøëdKBqDûî=üõU,Ôžð~S¤‘H—[„FUùP!S?ª7­+Xnf ´ŸŸ‰Q¡yB3ÑJ€†€Þt2
:ÂSø¿#¡™,Íô1L䕲{nÿb>òVc•<ùhÇéJŒìÄ퀕¿šãe5³X”ââªüÄUÐNØÛzc!oläÃÝ“ª9iÛÂÐ  êÞ¡Þ)òSþ-Ðét½   |ˆ&š'wÌAr9ö[ì·K$rI2¸ˆÕ5õ[1X¿°¹W¡'Ù>ñg–…$}‘˜mnòÛò¢z­ÔŠÍBØÊH¸[®âù l+½&ˆ¸´üô°Žùdz資oÆ=ó×.ôNÛºi{z·ˆcø¯þÁ›<n?»Ñµ¼¼üÌ Y÷ÎCÚAbýK¡ƒÿÈù‡)´ž|/Åÿˆ(ë¤_ï|ÛL=¹Ã7¾JXº¿ÍoIŸY¬ôÍÙQÀÒ¸~ò!aËæÆ×"(›Ÿ¥¹°‚_ ‹Qj‚†a‰3)‰{Ãç|e

有一些奇怪的值。

最佳答案

您总是在处理整个缓冲区,即使最后一次读取很可能不会完全填满缓冲区。您需要使用 read 变量来了解读取了多少字节,然后处理 byte[] 直到达到该限制。

关于java - 当我使用 AES 加密或解密文件时,文件末尾有奇怪的字符,这可能是缓冲区问题还是 AES 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58098050/

相关文章:

C++:使用 nlohmann json 从文件中读取 json 对象

c# - 查找并替换文件中的数据(不加载整个文件)?

java - 如何在Java中打开文件夹/目录

c# - 编码字符串时出现问题

asp.net - 保护 SQL Server 2008R2 数据库的安全

JavaMail 无法连接到 SMTP 主机 SSL 465 : handshake_failure

java - 为 Java 中的 WCF 服务生成代理和 PHP 重复消息错误

java - 如何从回调函数中调用类变量?

javascript - Aes javascript 加密 - java 解密

iphone - 如何在 iOS 设备上创建 PBKDF2 key