2016-01-21 34 views
0

我正在从php平台迁移到Java。我的数据库充满了数据加密标准(DES)中存储密码的用户。我通常会这样做自定义authenticationService:数据加密标准(DES)+ SPRING BOOT认证

@Autowired 
private AuthenticationServiceImpl authenticationService; 

@Override 
protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
    auth.userDetailsService(authenticationService) 
     .passwordEncoder(new BCryptPasswordEncoder()); 
} 

显然不会使用bCrypt。有什么建议么?

+1

请,**永远不要**存储用户密码,甚至不需要发明最强大的加密功能,因为它本质上**不安全**。存储*盐渍密码哈希*而不是每个密码都不同。阅读此内容以获得有关此主题的良好概述:https://crackstation.net/hashing-security.htm –

回答

1

你需要编写自己的使用DES的PasswordEncoder。它不应该是困难的,你可以搜索如何使用DES解密/加密数据(作为example)。

只是为了让你知道,加密密码是一个非常,非常,非常糟糕的做法(我会建议它的边界是犯罪),因为如果你的数据库和密钥exfiltrated,攻击者可以很轻松地获得访问纯文本密码并尝试重新使用其他网站上的登录详细信息。

既然你有访问明文密码,请考虑将它们转换为bcrypt和去除DES加密的密码(在DB,并希望从任何备份,你可能有)

+0

嗯,我通常只是存储使用Bcrypt创建的盐渍散列。 这样的事情:BCrypt.hashpw(employeeJPA.getEmail(),BCrypt.gensalt())和比我存储该值的数据库。我在那里做错了什么? 现在的问题是,我正在升级平台用PHP编写的5-8年前的其他人,我有我的。不知道该怎么做才知道。无论如何,请考虑一下。 –

+0

你说你在用bcrypt做的事情很好,因为它是一个散列函数,但是DES是一个**加密**函数,所以它可以被颠倒......并且**是一个问题。 – Augusto

+0

好了。所以你的建议是让所有用户从db,de-crypt DES到字符串,然后用bcrypt进行散列并将散列存储在db中。希望有一个更简单的解决方案。我正在开发的这个项目是一个针对本地业务的小型应用程序,他们不太关心安全性,而且我没有访问他们的整个代码,只是db,所以我不能改变他们存储密码和验证用户日志的方式即使我想要。无论如何感谢 –