我有一群用户。他们每个人都有相同的用户名 - 密码组合。我的数据库中有加密的数据(见下面的代码)。问题是,处理整个用例的最佳和最安全的方法是什么?我只想在电子邮件中发送用户名 - 密码组合,向每个用户发送相同的电子邮件。我应该只是解码密码或保存该时间段的文本密码,而不是用户发送电子邮件并删除文本密码,或者您对此有任何想法?
我的软件中没有那么无价的数据,但仍然...
private Users hashPasswordBase64(Users currentUser) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
String text = currentUser.getPassword();
md.update(text.getBytes("UTF-8"));
byte[] digest = md.digest();
currentUser.setPassword(Base64.encode(digest));
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(UsersController.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(UsersController.class.getName()).log(Level.SEVERE, null, ex);
}
Betaminos几乎奠定了指导方针。
我建议以编码格式将密码存储在服务器端,并且仅在有人尝试以该人身份登录时才对其进行解码。
另一种选择(假设这是一个小规模的事情)是发送一个混淆的密码,其中包含大量垃圾邮件字符(此处:http://pastebin.com/hT1AVMUp)(此处:http://pastebin.com/9He1sk2m)并让他们在客户端对其进行解码。 它不会击败任何人,但它应该使解码程序变得更加困难。
我建议即时解码密码,发送电子邮件并处理变量。存储密码只会使特洛伊木马更容易检索它。
除此之外,我建议提供一个密码,用户在第一次登录后需要更改该密码。这样,用户将能够选择易于记忆的密码,并且发送明文密码不会有任何问题,因为这在一次使用后变得无效。