Como limpar (substituir com bytes aleatórios) std :: string buffer interno?

Considere um cenário em questd::string é usado para armazenarum segredo. Uma vez consumido e não seja mais necessário, seria bom limpá-lo, ou seja, substituir a memória que o continha, ocultando assim osegredo.

std::string fornece uma funçãoconst char* data() retornando um ponteiro para (desde C ++ 11) memória contínua.

Agora, desde que a memória é contínuae a variável será destruída logo após a limpeza devido ao final do escopo, seria seguro:

char* modifiable = const_cast<char*>(secretString.data());
OpenSSL_cleanse(modifiable, secretString.size());

De acordo com o padrão citado aqui:

$ 5.2.11 / 7 - Nota: Dependendo do tipo do objeto, uma operação de gravação através do ponteiro, lvalue ou ponteiro para o membro de dados resultante de umconst_cast que lança fora umconst-qualifier68 pode produzir um comportamento indefinido (7.1.5.1).

Isso aconselharia o contrário, mas as condições acima (contínuas, a serem removidas apenas) a tornam segura?

questionAnswers(6)

yourAnswerToTheQuestion