如何处理encryption的string?

我试图做一个简单的应用程序,它可以encryption和解密一些简单的数据。 CryptEncrypt工作正常。 要encryption的string是: This is a sample string. 。 这个string的encryption数据是: ¼╩b╒áó√ $~ë▀i▐└╕ ]Φwµσ╨|V╜▐µáïÅ╚到目前为止,

我有encryption的文本后,我把它复制到另一个string。 这个string将用于解密。 由于某种原因,只有一半的string被复制到新的缓冲区中,因此不能被解密。 不pipe我怎么试。 我假设在encryption的string中有一些特殊字符,因此它不会按预期复制。 例如,如果我使用sprintf(teststring,"%s",Encryptedstring); 它也将只复制一半的string。

  1. 有没有办法使CryptEncrypt默认情况下以hexformsencryption数据?
  2. 我应该如何正确地复制我的string?

你正在犯一个基本的错误:

你正在向CryptEncrypt递交一个C字符串(我不能说是否有终止符),不知怎的,神奇地期待得到一个长度相同的有效C字符串。

事情并不是这样工作的,任何好的加密函数的输出看起来像一个伪随机二进制块,可能是嵌入的0字节,也许不是,也不可能有一个终止的0字节。

例如,您输出的输出比输入要长得多(最后一部分可能由于缺少0终结符而被垃圾捡起)。

解决方案:正确处理任意二进制数据作为任意二进制数据(复制memcpy )。
如果你愿意的话,你可以把它编码成一些文本表示来得到一个字符串,但这是一个额外的步骤需要更多的空间,当然不是CryptEncrypt的任务。

我的建议是,当你谈论加密时,不要用字符串来谈论。 你的字符串只是一个加密函数的原始数据块,所以要相应地处理它。 将数据作为字符串处理的问题是,如果找到空字符,则字符串趋向于终止,并且在加密块中将有可能获得空字节。

这就是为什么字符串函数不能使用加密的数据。 如果要将数据从缓冲区复制到另一个缓冲区,请使用memcpy而不是sprintf或strcpy。

我想如果遇到'\ 0'charcater,sprintf会停止复制。 你应该使用memcpy