Bu soru, this related question numaralı telefondan @sharptooth tarafından yapılan bir öneriyi izliyor.Parola korumalı bir sınıf nasıl yazılır?
std::string
, parola güvenli hale gelsin diye düzeltilebilir mi? Aksi takdirde, bir şifre-işleme sınıfı (yani belleğe yazdığı şey hakkında büyük bir özen gösterip yıkımdan önce temizleyen bir sınıf) yazmanın ilkeleri ne olurdu?
template <class T> class SecureAllocator : public std::allocator<T>
{
public:
template<class U> struct rebind { typedef SecureAllocator<U> other; };
SecureAllocator() throw() {}
SecureAllocator(const SecureAllocator&) throw() {}
template <class U> SecureAllocator(const SecureAllocator<U>&) throw() {}
void deallocate(pointer p, size_type n)
{
std::fill_n((volatile char*)p, n*sizeof(T), 0);
std::allocator<T>::deallocate(p, n);
}
};
Bu ayırıcısı ayırmayı kaldırma önce hafızayı sıfırlar:
1) std: wstring'i kullanın, 2) parola sembolleri yerine 0x2022'yi itin: o) Cidden, başka bir işlemin belleğinizden bir şey koklamasından korkuyorsanız, bazı maskeleri ekleyin/çıkarın (xor?) – alxx
@alxx : Std :: string 'yerine std :: wstring 'kullanılması daha güvenli olur mu? Bir şey mi eksik? – ereOn
0x2022 madde işareti simgesi. Anla? :) – alxx