1
舊版本的應用程序在其數據庫中存儲了一些明文密碼。我編寫了一個更新的版本,用於在創建新條目時對密碼進行加密,但我無法直接訪問數據庫以手動加密已存在的條目。更新生效後,它會嘗試解密明文密碼並崩潰。蠻力是檢測加密的唯一合理方法嗎?
短做一些激烈的,如刪除所有現有的數據,唯一的辦法我能想到的就是這個(當使用密碼數據稱爲包裝的僞代碼):
# 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)
這似乎是一個恥辱保留這些代碼以解決一次運行後會消失的問題。有沒有其他方法可以確保密碼被加密,只解密那些需要密碼的方法?