我想知道,是否存在与C#SecureString类对应物相对应的良好实现?
我已经找到了一些对字节使用XOR操作的东西,但这对我来说似乎太脆弱了。
答案 0 :(得分:1)
至少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::string
一样声明,即secure_string str("secret");
)(实际上*)都会在销毁时将其内存清零
Botan有一个secure allocator,您将使用与上一个示例中使用crypto ++分配器相同的方式,这也会将空闲的内存清零。
关于SO,还有一个非常类似的问题here,涵盖了有关由于某种原因而不想包含外部库的情况下如何实现自己的安全分配器的主题。
* std::string
在设计时并未考虑安全性。我建议阅读链接的答案以及有关如何以及为什么失败的相关材料。