我有一个用于添加/编辑密码的UI。这些密码在CBC模式下使用Blowfish加密,并且工作正常,但在解密过程中需要一个IV(它抛出一个参数缺少异常。)
我在启动密码时使用了密码类,因此在加密时会处理IV。
所以我怀疑是,
如果加密和解密的IV相同吗?我在一些页面上看到,如果我们使用不正确的IV解密,第一个块将是不正确的,但剩下的块是正确的。你能解释一下吗?
如果保存IV(如果使用相同的IV进行加密和解密),应将其保存为普通对象,还是使用某些分隔符与密码一起加密?哪个更安全?
提前致谢。
答案 0 :(得分:2)
但是,以加密形式存储密码通常被认为是一种不好的做法。如果有人要检索您的数据库,他们只需要找到一个密钥来检索所有密码。
存储密码的推荐方法是多次使用哈希函数,也称为PBKDF(基于密码的密钥派生函数),基于普通哈希或hmac函数。请参阅OWASP password storage cheatsheet。
在java中有这样的原语,请参阅the example on this page。 (搜索使用密码散列算法并向下滚动到java实现。)