Encryption 暴力是检测加密的唯一合理方法吗?
应用程序的旧版本在其数据库的clear中存储了一些密码。我已经编写了一个更新版本,在创建新条目时对密码进行加密,但是我没有直接访问数据库的权限来手动加密已经存在的条目。当更新上线时,它将尝试解密明文密码,然后崩溃 除了像删除所有现有数据这样激烈的操作之外,我能想到的唯一其他方法是(使用密码数据时调用包装器伪代码):Encryption 暴力是检测加密的唯一合理方法吗?,encryption,passwords,brute-force,Encryption,Passwords,Brute Force,应用程序的旧版本在其数据库的clear中存储了一些密码。我已经编写了一个更新版本,在创建新条目时对密码进行加密,但是我没有直接访问数据库的权限来手动加密已经存在的条目。当更新上线时,它将尝试解密明文密码,然后崩溃 除了像删除所有现有数据这样激烈的操作之外,我能想到的唯一其他方法是(使用密码数据时调用包装器伪代码): #数据指密码数据,加密或普通 如果数据长度
#数据指密码数据,加密或普通
如果数据长度
为了解决运行一次之后就消失的问题而保留此代码似乎是一种耻辱。是否有其他方法可以确保密码被加密,并且只解密需要的密码?在这种情况下,我会根据客户机和所涉及的系统执行以下操作之一:
- 设置加密密码,删除所有现有密码,并让每个人输入新密码。我更喜欢这样,因为密码很简单,随着时间的推移,可能会被看到或共享
- 运行一次性脚本加密系统中的每个密码。这样就不会有混合
- 具有以加密方法为前缀的较新加密密码,例如“SHA1:”。您可能会遇到这样的风险,即某人的密码开头有相同的文本,但可能性不大
# 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)