【问题标题】:Pass hashed password to Java Mail API将散列密码传递给 Java Mail API
【发布时间】: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


【解决方案1】:

您的 IMAP 服务器将需要未经哈希处理的密码才能进行身份验证。您可能已经在使用 SSL(正如您设置的 mail.imap.socketFactory.class),因此您的密码永远不会以明文形式发送。

顺便说一句:将 IMAP 与 SSL 与 javamail 一起使用的正确方法是使用imaps 协议(并使用mail.imaps.*,而不是使用 imap 协议并将 SSL 套接字工厂指定为套接字工厂。通常也带有 SSL 端口的 IMAP 是 993,而不是 143。

【讨论】:

  • 感谢您的回答,我会更正此问题。有没有办法像 CRAM-MD5 系统一样在服务器上使用散列密码并通过 JavaMail API 将其发送到服务器?
  • IMAP 有多种身份验证选项(支持取决于服务器),Javamail 支持多种身份验证选项(使用 sasl)。我已经有一段时间没有使用 Javamail了,所以我不能轻易说出你需要做什么才能让它正常工作。
猜你喜欢
  • 2012-12-25
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
  • 2022-08-24
  • 2017-08-10
  • 2022-01-12
  • 2011-02-23
相关资源
最近更新 更多