使用可变缓冲区进行编码/解码和加密/解密的含义

沙比尔米恩

我有一个使用对称密钥加密解密数据的程序

在加密过程中我:

  • 加密数据
  • Base64编码

解密过程中:

  • Base64解码
  • 解密数据

它工作正常。现在我正在尝试在流缓冲区上执行此过程。让我们假设加密是使用上述程序对大量数据完成的,并且只有在流式传输时才会进行解密。

在这种情况下,我对数据进行编码时使用缓冲区大小/块大小是否重要?

就像我在 3000 字节的缓冲区中对数据进行编码一样,我还应该读取多达 3000 字节的数据并进行解码吗?或者这无关紧要?

同样在解密时,我是否应该使用与将数据传递到 Cipher 时相同的缓冲区大小进行解密

我尝试使用独立程序使用不同的值,并且效果很好。但是,当我尝试流式传输时:

  1. 获取一些字节
  2. 解码它
  3. 解密它
  4. 保存到文件
  5. 对于下一组解密的字节,请继续附加到同一个文件中。

这样它似乎适用于某些大小的数据,而不适用于其他大小。数据的最终大小就像 lexx 一样2-4 个字节

我在这里错过了一些重要的原则吗?还是我可能在逻辑或循环中犯了错误,导致某些字节被遗漏?

如果是后者,我会更深入地检查它。

谢谢
沙比尔

沙比尔米恩

感谢上面的提示。我能够解决我遇到的问题。

正如上面的评论中提到的,在将数据解码解密为流时,缓冲区大小本身并不重要

但是,我遇到问题的原因是因为我正在为每个新的传入数据块初始化CipherOutputStream

相反,当我只在开始时将它初始化一次并为单个加密数据包的所有块维护它时,流程照常工作,没有问题。

CipherOutputStream cipherOutputStream = new CipherOutputStream(byteArrOutputStream, cipher);

这对流中的所有块进行了一次,并且有效。

由于
沙比尔

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

研究奇怪的协议缓冲区消息(解码和编码)

解码图片缓冲区和编码图片缓冲区之间有区别吗?

如何在node.js中使用.proto文件解码编码的协议缓冲区数据

您将如何使用协议缓冲区对Map <String,Object>进行编码?

socket_read('wss:// host'')返回我无法解密的加密缓冲区

加密/解密输出缓冲区大小以及何时多次调用EVP_EncryptUpdate

可变长度的可重复使用的缓冲区

使用 VSCode 的编码设置读取缓冲区

为什么这个解码/编码过程会给出不同的缓冲区数组?

如何在JavaScript中使用google-protobuf使用“地图”对消息进行编码?(协议缓冲区)

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

使用内存映射的缓冲区进行稀疏

使用模板缓冲区进行交叉检测

使用单个Cipher对象还是两个不同的对象进行解密和加密操作?

何时使用数组,缓冲区或直接缓冲区

在某些缓冲区大小下,通过分块传输编码在Jetty中进行慢速传输

C ++中的Tensorflow:成功读取LSTM编码器解码器模型的协议缓冲区

FFmpeg使用avcodec_decode_video2解码原始缓冲区

使用ProtoBuf.js在JavaScript中解码Google协议缓冲区消息

套接字和缓冲区的含义相同吗?

为什么我得到不同的输出?我正在使用有界缓冲区、pthreads 和信号量使用 C++ 进行编码

如何使用ioctl + nix宏获取可变大小的缓冲区

使用命令行参数解密和加密文本

如何使用替代函数来解密和加密消息

解码node.js中的缓冲区

如何对多个数字进行编码和加密?

Scala:从返回Seq的函数返回可变缓冲区

实现可变大小的环形缓冲区?

通过消息队列发送可变大小的缓冲区