【发布时间】:2013-12-16 04:20:12
【问题描述】:
这里有一个有趣的。我正在编写一个 AES 加密算法,并设法让它进行准确的加密。当我尝试将结果写入文件时,麻烦就来了。我得到的文件输出不正确。十六进制值会被破坏,而且通常是荒谬的(即使按照加密标准)。
我通过在将加密输出发送到文件之前对其进行采样进行了一些调试。我发现我在某个地方出现了某种溢出。当正确的十六进制值应该是 9e 时,我会得到 ffffff9e。它只会对高于 7F 的十六进制值执行此操作,即未正确处理“扩展”字符集中的字符。这在我的项目早期也发生在我身上,然后问题是使用 char[][] 容器而不是 unsigned char[][] 容器。
我的代码使用字符串在用户界面和 AES 加密类之间传递加密数据。我猜 std::strings 不支持扩展字符集。所以我的问题是:有没有办法实例化一个无符号字符串,还是我必须找到一种方法来替换我对字符串的所有使用?
【问题讨论】:
-
这种情况经常发生在 MS-Windows 上。他们
char被认为是签名的(即使在mingwin和其他移植到MS-Windows的Unix开发工具中)。在Linux下,它类似于unsigned char(但仍然是一个单独的类型。)
标签: c++ string encryption