没有加密大小的解密

C++ - Decrypting without encryption size

本文关键字:解密 加密      更新时间:2023-10-16

我已经找了一段时间,我还没有找到这个问题的解决方案。我正在使用BCryptDecrypt来解密我的加密数据,但它需要EncryptedData的大小,您如何能够在不知道大小的情况下解密?

我知道BCryptEncrypt在成功加密数据后给你长度,我知道我如何能够发送加密数据/IV的唯一方法。

例如:假设我要加密数据,然后将其通过带IV的套接字发送到我的WinSock服务器,该服务器将解密数据。服务器如何在不知道密码大小的情况下解密它呢?即使它知道键和IV。

谢谢

如果需要大小,我认为有两种方法可以获得:

  • 与加密数据一起显式发送。在服务器端缓冲所有数据,直到它被完全接收。跟踪您收到了多少字节。

首先,您可以尝试这样做:

<number of bytes to follow><separator symbol><message data>

第二个要求您能够正确地检测消息的结尾。您可以通过特定的消息结束序列检测到这一点。但是,如果消息中出现了这样的序列,则需要转义。类似于C/c++/Java/c#中字符的转义方式…如果不选择第一种方法,这对我来说似乎是最简单的,我可能会更喜欢下面的变体…

另一种选择可能是在消息完成后关闭连接。然后,您需要检测连接是定期关闭还是断开,因为在后一种情况下,您不能尝试解码…

你甚至可以结合这两种方法:

<message start sequence>
<number of bytes to follow>
<separator symbol>
<encrypted data>
<message end sequence>

消息开始序列和消息结束序列都必须被转义。如果您在加密数据中检测到消息的开始序列,或者在读取字节数之前检测到消息的结束序列,那么您就知道在服务器端出现了严重问题…