首页 > 解决方案 > 是否有安全字符串的良好 C++ 实现

问题描述

我想知道,C# SecureString 类的某种对应物是否有一些好的实现?

我已经找到了一些东西,对字节使用 XOR 操作,但这对我来说似乎太脆弱了。

标签: c++stringsecurity

解决方案


至少 C++ 加密库crypto++botan都为“安全字符串”提供了帮助。那里可能有更多具有该功能的库。

例如,在 crypto++ 中,您可以使用:

#include <string>
#include <cryptopp/secblock.h>

using secure_string = std::basic_string<char, std::char_traits<char>, CryptoPP::AllocatorWithCleanup<char>>;

之后您创建的任何secure_string内容(基本上就像任何其他常规std::stringie一样声明secure_string str("secret");),将(在实践中*)在销毁时将其内存归零。

Botan 有一个安全分配器,您可以使用与上一个示例中使用的 crypto++ 分配器相同的方式,它也会在空闲时清零内存。

在 SO 上还有一个非常相似的问题涵盖了如何实现自己的安全分配器的主题,如果由于某种原因您不想包含外部库。


*std::string设计时没有考虑到安全性。我建议阅读链接的答案和相关材料,了解它如何以及为什么会失败。


推荐阅读