Anda memelihara aplikasi yang sudah ada dengan basis pengguna yang mapan. Seiring waktu diputuskan bahwa teknik hashing kata sandi saat ini sudah usang dan perlu ditingkatkan. Lebih lanjut, untuk alasan UX, Anda tidak ingin pengguna yang ada dipaksa untuk memperbarui kata sandi mereka. Seluruh pembaruan hashing kata sandi harus terjadi di belakang layar.
Asumsikan model database 'sederhana' untuk pengguna yang berisi:
- ID
- Kata sandi
Bagaimana cara seseorang menyelesaikan masalah seperti itu?
Pikiran saya saat ini adalah:
- buat metode hashing baru di kelas yang sesuai
- perbarui tabel pengguna dalam basis data untuk menampung bidang kata sandi tambahan
- Setelah pengguna berhasil masuk menggunakan hash kata sandi yang kedaluwarsa, isilah bidang kata sandi yang kedua dengan hash yang diperbarui
Ini membuat saya dengan masalah yang saya tidak dapat membedakan secara wajar antara pengguna yang memiliki dan mereka yang belum memperbarui hash kata sandi mereka dan dengan demikian akan dipaksa untuk memeriksa keduanya. Ini tampaknya sangat buruk.
Lebih jauh lagi ini pada dasarnya berarti bahwa teknik hashing lama dapat dipaksa untuk tetap tanpa batas waktu sampai setiap pengguna telah memperbarui kata sandi mereka. Hanya pada saat itu saya bisa mulai menghapus cek hashing lama dan menghapus bidang database berlebihan.
Saya terutama mencari beberapa tips desain di sini, karena 'solusi' saya saat ini kotor, tidak lengkap dan apa yang tidak, tetapi jika kode aktual diperlukan untuk menggambarkan solusi yang mungkin, jangan ragu untuk menggunakan bahasa apa pun.