2013-03-04 93 views
1

我从服务器密码中得到如下所示,我需要验证用户密码是否像表单服务器一样。我该怎么做?在android中的PBKDF2安全密钥

从服务器我得到这个

pbkdf2_sha256$10000$v2WJyd8HkqhU$QVAp707PYTiFDHvzjwBCTbecr9+6q2OIPsunPyOxXGU= 
+0

算法是'pbkdf2_sha256',迭代次数是'10000',salt是'v2WJyd8HkqhU',结果散列(Base64编码)是'QVAp707PYTiFDHvzjwBCTbecr9 + 6q2OIPsunPyOxXGU ='。因此,您需要应用salt,迭代次数和用户提供的密码来生成哈希。然后你可以将它与上面的散列进行比较。 – 2013-03-04 19:09:53

+0

这是肯定的盐“v2WJyd8HkqhU”,所以你可以写我这里例如如何获得输出字符串? – Amsik 2013-03-04 19:14:40

+0

请参阅[这个答案](http://stackoverflow.com/questions/8091519/pbkdf2-function-in-android) – 2013-03-04 19:16:59

回答

1

所以BouncyCastle的(在的Andorid的加密提供)使用SHA256没有实现PBKDF2,所以您将获得非常轻微的自定义。这个SO answer告诉你要修改哪个类来获得设置的算法。那么你将需要整合它,或者弄清楚如何自己调用它(恐怕我不能帮上太多忙)

只要散列本身的格式(如defined here)是:

<algorithm>$<iteration count>$<salt>$<hash> 

凡在你的情况下,迭代次数是10000,你的盐是ASCII字符串v2WJyd8HkqhU和哈希是通过以base64字符串表示的字节数组QVAp707PYTiFDHvzjwBCTbecr9+6q2OIPsunPyOxXGU=

你将计算UTF8的哈希指定参数的密码字符串。然后,您可以base64对散列的输出进行编码并比较字符串,或者base64对接收到的散列进行解码并比较字节数组。 Apache Commons Codec在其Base64类中提供了一些很好的Base64编码/解码方法。

+0

嗯,在实施了一套KBKDF之后,我可能会看看有关弹性的问题。请注意,轻量级API可能比使用提供程序更具可配置性。 – 2013-03-04 21:53:11