安全地调整和删除std :: string

时间:2012-09-07 18:55:44

标签: string security visual-c++ resize

我有一个包含字符串的类。目前,它是一个std :: wstring但不一定是。我读过here不应该使用std :: string但是我想知道这样的事情是否会起作用:

if (aString.length() == aString.capacity() )
{
    std::wstring oldString = aString;
    aString = wstring(aString);
    aString.reserve(PREALLOCATION_AMOUNT);
    SecureZeroMemory((PVOID)oldString.c_str(),oldString.size());
    oldString.clear();
}

这基本上等同于字符串缓冲区的安全重新分配吗?如果没有更好的解决方案?

2 个答案:

答案 0 :(得分:0)

无法保证c_str()将指向原始缓冲区而不进行复制。这可能可能它的工作方式,但是如果不查看basic_string的具体实现,就无法确定。

使std::wstring安全有足够的潜在问题我完全避免它并找到一个安全的字符串类或自己编写。

答案 1 :(得分:0)

我不知道这是否真的有用,但也许你可以试试这个:

#include <algorithm>
#include <string>

// ...

std::string password = "sekrit";
std::fill(password.begin(), password.end(), 0);

当然,这假设你的字符串永远不会调整大小。如果是,您将失去对存储字符串WAS开头的内存的访问权限。正如其他人所指出的那样,这可能是一个坏主意。