使用 base 64 编码的 javax.mail.Authenticator

Posted

技术标签:

【中文标题】使用 base 64 编码的 javax.mail.Authenticator【英文标题】:javax.mail.Authenticator with base 64 Encoding 【发布时间】:2018-09-01 01:07:23 【问题描述】:

我有一个服务器,它要求 ID 和密码必须以 Base64 编码。意思不是Username,您必须先将其编码为Base64,然后输入编码的字符串。

然后在我的 Java 客户端中,我有一个 javax.mail.Authenticator。我手动将 ID 和密码编码为 base64,将它们保存为字符串并使用这些字符串初始化 Authenticator。但是后来ID和密码是错误的,即使我检查了一遍又一遍。

在这种情况下会出现什么问题?

编辑:另一个问题是关于身体部位的,这里是关于Authenticator

【问题讨论】:

您手动编码可能是错误的,您将它们设置为身份验证器的方式,......很难说。 JavaMail base64 encoding的可能重复 @AxelH 我在网站的帮助下进行了编码,并使用这些结果登录,它有效,但不适用于我的 Java 客户端.. @AxelH 无论如何我已经阅读了另一个问题,我还不想对我的 MimeBodyPart 进行编码,因为我的身份验证甚至可以正常工作.. 服务器使用什么认证机制?如果它使用需要 base64 编码的标准之一,JavaMail 将为您执行该编码。您是否尝试过不对其进行编码?如果它使用通常需要纯文本用户名和密码的机制之一,但它希望您首先对它们进行 base64 编码,那么您必须自己进行。请注意,您通常don't need an Authenticator,只需使用允许您指定用户名和密码的连接或发送方法。 【参考方案1】:

使用 java.util.Base64。编码和解码如下:

String s = "...full Unicode...";
s = Base64.getEncoder().encodeToString(s.getBytes(StandardCharsets.UTF_8));
s = new String(Base64.getDecoder().decode(s), StandardCharsets.UTF_8);

有一些可能的调整,比如最后没有填充,替代 URL 安全 Base64 等等。

【讨论】:

【参考方案2】:

我的问题的答案是邮件服务器中的 openssl 需要 Base64 编码,而当我通过 java 客户端连接时,它的 UTF-8。

【讨论】:

也就是说,JavaMail 会为您完成任何所需的 base64 编码。

以上是关于使用 base 64 编码的 javax.mail.Authenticator的主要内容,如果未能解决你的问题,请参考以下文章

javax mail发邮件

密码学Base64 编码 ( Base64 简介 | Base64 编码原理 | 最后编码组字节不足时补位 ‘=‘ 符号 | Base64 编码实现参考 )

Base64编码

Base64 编码知识,一文打尽!

将 Base64 编码图像加密为另一个有效的 Base64 编码图像

Base64编码