C++ C++;-无加密大小的解密

C++ C++;-无加密大小的解密,c++,cng,C++,Cng,我找了好一阵子,还没有找到解决这个问题的办法。我正在使用BCryptDecrypt对加密数据进行解密,但它需要加密数据的大小,您如何在不知道大小的情况下进行解密 我知道BCryptEncrypt在成功加密数据后会给出长度,我知道的唯一方法是将其与加密数据/IV一起发送 例如:假设我要加密数据,然后通过带有IV的套接字将其发送到我的WinSock服务器,该服务器将解密数据。服务器如何能够在不知道大小的情况下解密它?即使它知道钥匙和IV 谢谢如果需要尺寸,我可以通过两种方式获得: 将其与加密数据一

我找了好一阵子,还没有找到解决这个问题的办法。我正在使用BCryptDecrypt对加密数据进行解密,但它需要加密数据的大小,您如何在不知道大小的情况下进行解密

我知道BCryptEncrypt在成功加密数据后会给出长度,我知道的唯一方法是将其与加密数据/IV一起发送

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


谢谢

如果需要尺寸,我可以通过两种方式获得:

  • 将其与加密数据一起显式发送
  • 缓冲服务器端的所有数据,直到完全接收为止。跟踪您收到的字节数
使用first,您可以尝试以下方法:

<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>


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

如果需要大小,我可以通过两种方法获得它:

  • 将其与加密数据一起显式发送
  • 缓冲服务器端的所有数据,直到完全接收为止。跟踪您收到的字节数
使用first,您可以尝试以下方法:

<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>


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

文档中怎么说?您使用的是什么代码?发送加密数据时,还应发送长度。(无论如何,您必须使用套接字通信来执行此操作,否则接收方将不知道数据包何时完成)您只需要对要加密的数据进行填充。它允许在解密后恢复原始流长度。有关详细信息,请参阅文档说明了什么?您使用的是什么代码?发送加密数据时,还应发送长度。(无论如何,您必须使用套接字通信来执行此操作,否则接收方将不知道数据包何时完成)您只需要对要加密的数据进行填充。它允许在解密后恢复原始流长度。请参阅详细信息。我通过网络明确地发送了它来测试它,它工作得非常好。我会展示我是如何发送它的,但评论似乎不喜欢格式化。谢谢。我明确地通过电线发送它来测试它,它工作得很好,我会展示我是如何发送它的,但是评论似乎不喜欢格式化。谢谢