Encryption 暴力是检测加密的唯一合理方法吗?

Encryption 暴力是检测加密的唯一合理方法吗?,encryption,passwords,brute-force,Encryption,Passwords,Brute Force,应用程序的旧版本在其数据库的clear中存储了一些密码。我已经编写了一个更新版本,在创建新条目时对密码进行加密,但是我没有直接访问数据库的权限来手动加密已经存在的条目。当更新上线时,它将尝试解密明文密码,然后崩溃 除了像删除所有现有数据这样激烈的操作之外,我能想到的唯一其他方法是(使用密码数据时调用包装器伪代码): #数据指密码数据,加密或普通 如果数据长度

应用程序的旧版本在其数据库的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)