非托管C++将字符串加密为C#字节[]

本文关键字:字节 加密 字符串 C++ | 更新日期: 2023-09-27 17:48:48

我从C#类库调用了一个非托管的C dll,它将字符串值加密为包含非ascii字符的加密字符串。我需要获取数据并将其二进制值写入文件,但C#将文本视为string而不是byte[]

加密值通常包含特殊字符('r'O等)。当我使用某种类型的代码集(ascii、utf-7、utf-16)将返回的字符串转换为C#时,它会将特殊字符值写入Windows解释的值,而不是它们的实际二进制表示。

我的问题是,如何将非托管dll中的数据拉入byte[]而不是字符串,以便使用BinaryWriter将其写入文件?

谢谢。

非托管C++将字符串加密为C#字节[]

如果我理解正确,我认为您想要Encoding.GetBytes()可能使用UTF8?

您尝试过使用ASCIIEncoding类吗?它应该将任何UTF-8字符转换为"?"的ascii字符

MSDN页面

用法

ASCIIEncoding ascii = new ASCIIEncoding();
Byte[] encodedBytes = ascii.GetBytes(unicodeString);

您正在使用p/Invoke吗?嗯…也许指定[MarshalAs(UnmanagedType.*)]会有所帮助。此外,您可以创建一个中介C函数,将加密的数据公开为(void*)。这应该更容易进入字节[]。