【发布时间】:2013-01-18 09:35:52
【问题描述】:
大家早上好,
我正在使用 GWT 框架为我的公司开发 ERP,我会得到 使用 Java Mail API 的未读电子邮件的数量。 我可以这样做,但问题是我将 SHA-512 哈希密码存储在 数据库,我不会将明文密码传递给 Java Mail API,而只是将散列密码传递给避免在网络上传输明文密码。
我用这段代码来获取未读邮件的数量:
private static int getNumberOfUnreadMails() {
int numberOfUnreadMails = 0;
Properties properties = new Properties();
properties.put("mail.imap.host", "myserver.com");
properties.put("mail.imap.user", "developper@myserver.com");
properties.put("mail.imap.socketFactory", 143);
properties.put("mail.imap.socketFactory.class", "java.net.ssl.SSLSocketFactory");
properties.put("mail.imap.port", 143);
Session session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("developper@myserver.com", "mypassword");
}
});
Store store;
try {
store = session.getStore("imap");
store.connect();
Folder folder = store.getFolder("Inbox");
numberOfUnreadMails = folder.getUnreadMessageCount();
} catch (Exception e) {
e.printStackTrace();
}
return numberOfUnreadMails;
}
我还可以使用另一种散列算法。 如果您知道我的问题的解决方案,请提前谢谢您。
P.S.:对不起我的英语不好,我是法国人。
【问题讨论】:
-
只需加密流量(看起来你可能已经这样做了)。如果您这样做,密码不应该已经清楚。散列密码客户端实际上会降低系统的安全性,因为它破坏了盐的任何目的(除非您在服务器上对散列进行加盐然后重新散列)。如果您没有使用盐,那么哈希只是成为您以明文形式发送的新密码。
-
感谢您的回答。是的,我想到了这个方案,在客户端和服务器之间使用 SSL 连接,但是如果服务器被攻破,黑客可以得到清晰的密码。
-
您没有看到的是,如果您可以发送哈希,那么哈希就是所有意图和目的的明文密码。
标签: java email imap jakarta-mail