2015-04-02 87 views
0

我在数据库中存储用户加密的密码。如何解密存储在数据库中的shiro密码..?

代码:

String username = "admin"; 
String encrypted_password = createPassword("admin$321"); 
// $shiro1$SHA-256$500000$mAXboFyyOtBVoGi6AD8LXw==$acHoVyuQyOSOKfjqwAHXyEVTH7p9cH79yI+0O15NS0U= 
System.out.println(getOriginalPassword(encrypted_password)); 

private static String createPassword(String password) { 
DefaultPasswordService passwordService = new DefaultPasswordService(); 
DefaultHashService hashService = new DefaultHashService(); 
hashService.setHashIterations(passwordService.DEFAULT_HASH_ITERATIONS); 
hashService.setHashAlgorithmName(passwordService.DEFAULT_HASH_ALGORITHM); 
hashService.setGeneratePublicSalt(true); 

passwordService.setHashService(hashService); 
String encryptedPassword = passwordService.encryptPassword(password); 
System.out.println(encryptedPassword); 
return encryptedPassword; 
} 

private static String getOriginalPassword(String encrypted_password) { 
    return null; 
} 

如何解密存储的密码..?

+1

所以,只需要明确一点:你在问如何解密自己加密的密码?在使用它之前不应该知道算法的两个方面吗? – GhostCat 2015-04-02 09:03:56

+2

与@Torben的答案相反,密码检查的方式*总是*在设计合理的安全系统中完成,不容易受到合法的不可否认行为的影响*使用安全散列算法对密码进行散列*并比较*哈希。*这样的系统很难恢复明文密码。如果你正在设计一个假设有能力的系统,那么你做错了,不仅仅是技术上的,而且是合法的,这会破坏你的公司。在继续进行之前,请先获得专业建议 – EJP 2015-04-02 09:15:26

+0

@EJP那不就是我说的吗? – Torben 2015-04-02 09:17:20

回答

-1

如何进行密码检查通常是您加密用户提供的密码,并将结果与​​存储在数据库中的加密密码进行比较。

如果你需要解密密码,那么你做错了什么,如果我们知道你为什么需要解密它们,它会帮助我们更好地回答问题。

如果您可以解密存储的密码,那么首先加密它们并没有太多意义,因为加密的重点是保护密码以防窥探。如果你可以解密他们,加密是一个麻烦,而不是安全功能。

+0

我正在做用户面板,其中管理员/管理员将编辑用户信息以及更改用户密码。我不在数据库中以明文存储密码..... – 2015-04-02 09:16:09

+1

然后,您不需要解密旧密码。只需加密新密码并存储它。 – Torben 2015-04-02 09:17:44

相关问题