旧版本的应用程序在其数据库中以明文形式存储了一些密码。我已经编写了一个更新版本,可以在创建新条目时对密码进行加密,但是我没有直接访问数据库来手动加密已存在的条目。当更新生效时,它将尝试解密明文密码并崩溃。
如果没有像删除所有现有数据这样做得很厉害,我能想到的唯一其他方法就是这个(使用密码数据时会调用包装器伪代码。):
# 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)
保持此代码以解决在运行一次之后消失的问题似乎是一种耻辱。是否有任何其他方法可以确保密码被加密并且只解密需要它的密码?
答案 0 :(得分:2)
在这种情况下,我会执行以下操作之一,具体取决于客户端和所涉及的系统: