在使用padding解密消息时,如何确定原始数据长度?

问题描述 投票:-1回答:1

我有一个AES-128加密的字节数组,使用PaddingMode.Zeros。我解密得很好,但当数据以0结束时,我无法弄清楚数据在哪里结束,填充在哪里开始。我们使用AesCryptoServiceProvider和ICryptoTransform进行加密和解密。

这是一个问题,因为我试图将未加密的字节数组解析为协议缓冲区。如果我尝试解析整个数组和额外的数据,我得到一个错误 "Google.Protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero)"。如果我删除了太多的零(全部),我得到了另一个错误 "Google.Protobuf.InvalidProtocolBufferException: 在解析协议消息时,输入在字段中间意外结束"。我试过使用Google.Protobufers和Protobuf.net,它们都给出了类似的错误。

我怎么知道那个数组里有多少padding?或者,有什么方法可以防止在将数据解析成protobuf时出现错误?

c# encryption aes protocol-buffers
1个回答
0
投票

使用 PaddingMode.Zeros 在大多数情况下不建议使用。通常只在加密数据时使用,保证数据只包含非零字节(否则无法自动删除填充)。使用PKCS7,这是最常见的填充类型,可以自由使用任何类型的数据。

© www.soinside.com 2019 - 2024. All rights reserved.