2013-08-03 27 views
-4

我已经使用MessageDigest来哈希我的密码+ salt,现在我想要转换回来,以便获得与用户密码相比较的原始值。使用DatatypeConverter解码字节到原始字符串

String _Pass = new String(tfuserpass.getPassword());  
    //=========================================================================================================================================================== 
    MessageDigest md = null; 
    try 
    { 
     md = MessageDigest.getInstance("SHA-512");   
    } 
    catch (NoSuchAlgorithmException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    md.update(_Pass.getBytes()); 
    byte byteData[] = md.digest(); 

    StringBuffer sb = new StringBuffer(); 
    for (int i = 0; i < byteData.length; i++) 
    { 
    sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1)); 
    } 


Class main() 
{ 

//I have used MessageDigest to hash + salt in this class for password. 
} 

Class main1() 
{ 
//Now I want to decode and compare the values with the actual value to authenticate the user here. 


} 

如何验证用户?

+1

你似乎不明白是什么* *散列是。这是单向的。 –

+0

好的我知道了......但是如何在登录时进行身份验证? – anuj

回答

1

一旦你创建了一个消息摘要,你不能解密它,通常的做法是采取新的密码,应用相同的salt和散列值,并将结果值与原始散列值进行比较。

这样,你永远不存储用户密码,如果你遭受过黑客攻击用户固定

+1

当然,忽略SHA哈希是当今存储密码的错误方法。 –

+0

同意了,散列需要被存储,并且仔细查看数据没有被正确地散列,因为我没有看到一个盐 –

+0

我再次需要散列+盐来再次登录时进行比较? – anuj

相关问题