如何存储敏感数据(例如:密码)std::string?
我有一个应用程序,提示用户输入密码,并在连接设置期间将其传递给下游服务器.我想在建立连接后安全地清除密码值.
如果我将密码存储为char *数组,我可以使用SecureZeroMemory等 API 来清除进程内存中的敏感数据.但是,我想在代码中避免使用char数组,并且正在寻找类似的东西std::string?
我正在使用第三方API(确切地说是CryptEncrypt),它将C数组作为输入输出参数.从逻辑上讲,API归结为以下功能:
void add1(int *inout, size_t length)
{
for(size_t i = 0; i < length; i++)
{
inout[i] += 1;
}
}
Run Code Online (Sandbox Code Playgroud)
我试图避免使用原始数组,所以我的问题是我可以使用std :: vector作为上面API的输入吗?类似于以下内容:
#include <vector>
int main()
{
std::vector<int> v(10); // vector with 10 zeros
add1(&v[0], v.size()); // vector with 10 ones?
}
Run Code Online (Sandbox Code Playgroud)
我可以使用向量的"连续存储"保证向其写入数据吗?我倾向于认为这是可以的(它适用于我的编译器),但如果比我更有知识的人能够确认这样的用法是否违反C++标准保证,我会感觉好多了.:)
提前致谢!
我最近选择了scons来为中型C++项目实现一个多平台构建框架.构建生成了一堆单元测试,应该在它的最后调用.如何实现这种目标?
例如,在我的顶级sconstruct中,我有
subdirs=['list', 'of', 'my', 'subprojects']
for subdir in subdirs:
SConscript(dirs=subdir, exports='env', name='sconscript',
variant_dir=subdir+os.sep+'build'+os.sep+mode, duplicate=0)
Run Code Online (Sandbox Code Playgroud)
每个subdir都有它的单元测试,但是,因为dll和它们内置的可执行文件之间存在依赖关系 - 我想保持测试的运行,直到所有的子目录都已构建和安装(我的意思是,使用env.Install ).
我应该在哪里编写循环来迭代构建的测试并执行它们?我试着把它放在这个循环之后 - 但是因为scons不能让你控制执行的顺序 - 它会在我想要之前执行得很好.
请帮助一个scons新手.:)
谢谢,