PVH*_*PVH 8 java encryption mongodb mongodb-query
我有以下代码,它插入userName和password插入数据库,但密码以纯文本格式存储.我的意思是当我查看数据库时,我可以看到插入的密码.
我想存储password的encrypted格式
MongoClient client = new MongoClient("localhost",27017);
DB db = client.getDB("Test");
DBCollection collection = db.getCollection("EncryptionDemo");
BasicDBObject documentDetail = new BasicDBObject();
documentDetail.put("userName", "admin12");
documentDetail.put("password", "12345");
collection.insert(documentDetail);
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
Phi*_*ipp 14
根据评论中的对话,你的意思是散列密码,而不是加密密码.你通常会用盐来防止彩虹表攻击.将密码存储为salted哈希是将密码存储在数据库中的最佳实践标准.
从版本3.2开始,MongoDB没有像某些SQL数据库提供的密码散列本机支持,因此您必须在Java中实现它.
要生成新帐户或更改现有帐户的密码,请执行以下操作:
java.security.SecureRandom.这个类就像标准的随机数生成器java.util.Random(它是一个子类)一样工作,但是为了安全相关的上下文所需的更高级别的非可预测性而交换性能.javax.crypto.SecretKeyFactory.username,password_hash和password_salt(加上您的实际应用数据,当然).不保存原始密码.要检索帐户:
username_input并password_input在登录表单中输入所谓的用户.username与username_input用户提供的匹配项的文档.password_salt从该文档中获取字段password_salt,并password_input就像你以前那样.password_hash文档字段进行比较.匹配时,用户输入了正确的密码.您也可以只检索文档的password_hash和password_salt字段,并在用户通过身份验证之前不加载其余字段,但我认为在现实世界中它会导致比保存更多的负载.成功登录通常会大大超过不成功的登录,除非您有攻击者试图暴力破解帐户.在这种情况下,您可以使用fail2ban或其他登录限制机制来阻止攻击者.
| 归档时间: |
|
| 查看次数: |
11013 次 |
| 最近记录: |