使用BCryptPasswordEncoder加密邮箱密码后无法发送邮件的问题
问题原因及解决方案
为什么加密后无法发送邮件?
Spring Mail的spring.mail.password配置项不会自动处理BCrypt加密的密码,它会把你写的"{bcrypt}$2a$10$FXSkpQloaZILb7ixYTD2P./yutuASulNhEQ1UVEodX7Ao0oGgcaFG"整个字符串直接当作明文密码发送给SMTP服务器。而SMTP服务器需要的是你的原始明文密码(比如my-password),自然会认证失败。
另外要明确:BCrypt是单向哈希算法,只能用来验证输入的密码和存储的哈希值是否匹配,根本无法反向解密出原始明文密码。这也是它适合存储用户密码的原因,但完全不适合用来配置需要明文的第三方服务(比如SMTP)。
正确的做法
如果想加密配置文件里的邮件密码,应该用可逆的加密方案,比如Spring支持的Jasypt加密:
- 用Jasypt对明文密码加密,得到加密后的字符串
- 在配置文件里用
{jasypt}前缀标识,Spring启动时会自动解密出明文,再传给Mail组件
如果不想引入额外依赖,也可以用Spring Cloud Config的加密功能,原理类似,都是可逆加密后自动解密。
内容的提问来源于stack exchange,提问作者xRay
相关产品推荐
相关产品推荐

