Bezpieczenie wyczyszczenie stringa

0

Mam w zmiennej string klucz kryptograficzny, czy to dobra metoda jego bezpiecznego usunięcia z pamięci?

memset((unsigned char*)Key.c_str(), 0x00, Key.length());

Czy można użyć tej samej metody dla String z VCL (C++ Builder)?

0

To co napisałeś to jest tragedia!!
Przecież metoda c_str() zwraca ci KOPIĘ twojego stringa jako char*. Co więcej, nie masz pewności czy po wywołaniu tej metody nadal ten string tam będzie. Równie dobrze moze się okazać że piszesz po cudzej pamięci.
Znacznie sensowniejsze rozwiązanie to wpisanie do tego stringa nowej wartości, o identycznej długości co poprzednia (nie ryzykujesz ze nastąpi przepisanie stringa w nowe miejsce i tym samym pozostawienia w dawnym miejscu twojego klucza).
http://www.cplusplus.com/reference/string/string/c_str/

The returned array points to an internal location with the required storage space for this sequence of characters plus its terminating null-character, but the values in this array should not be modified in the program and are only granted to remain unchanged until the next call to a non-constant member function of the string object.

0

Dzięki, zasugerowałem się tym, że po tej operacji w stringu faktycznie były zera.

0

Och no bo może sie tak złożyć akurat że ta metoda zwróci ci adres tablicy w której faktycznie trzymany jest "oryginał" i ten adres nie zmieni się przed wywołaniem memset(), ale to jest kwestia przypadku, a nie reguła.

0

Czyli rozumiem, że gdyby klucz był od razu w char*, to wszystko byłoby ok, tak?

0

Tak. A jeśli znasz długość klucza to nawet szybszym i bardziej optymalnym rozwiazaniem moze sie okazać użycie char*.

1 użytkowników online, w tym zalogowanych: 0, gości: 1