古いバージョンのアプリケーションでは、いくつかのパスワードがデータベースのクリアに保存されています。新しいエントリが作成されたときにパスワードを暗号化する更新バージョンを作成しましたが、データベースに直接アクセスして、既存のエントリを手動で暗号化することはできません。アップデートが公開されると、プレーンテキストのパスワードを復号化しようとしてクラッシュします。
既存のすべてのデータを削除するなどの抜本的なことを行う以外に、私が考えることができる他の唯一のアプローチはこれです(パスワードデータが使用されるときに呼び出されるラッパー擬似コード)。
# data refers to the password data, either encrypted or plain
if data length < AES.block_size:
# (Shorter than initialization vector, definitely not encrypted.)
open database and replace password entry with encrypt(data)
login(username, data)
else:
try: # try plaintext first
login(username, data)
except AuthenticationError:
login(username, decrypt(data))
else: #plain text worked, encrypt data for future use.
open database and replace password entry with encrypt(data)
一度実行した後に解消される問題を解決するためにこのコードを保持するのは残念なことのようです。パスワードが暗号化され、それを必要とするものだけを復号化するために機能する可能性のある他のアプローチはありますか?