Android API 24及更低版本上带有HMACSHA256的PBKDF2
我正在尝试在android上使用Luke Joshua Park。我的问题是PBKDF2WithHmacSHA256不适用于API 26以下的android。有没有办法解决这个问题?在API 26之前,Android不支持Android API 24及更低版本上带有HMACSHA256的PBKDF2,android,security,encryption,Android,Security,Encryption,我正在尝试在android上使用Luke Joshua Park。我的问题是PBKDF2WithHmacSHA256不适用于API 26以下的android。有没有办法解决这个问题?在API 26之前,Android不支持PBKDF2withHmacSHA256,但在旧版本中它确实支持PBKDF2withHmacSHA1。除非您有特定的原因想使用SHA256作为PBKDF2哈希,否则更改它并没有坏处 通过调整PBKDF2_NAME参数,可以相对轻松地更改我的存储库中的算法。SHA1仍然可以安全地
PBKDF2withHmacSHA256
,但在旧版本中它确实支持PBKDF2withHmacSHA1
。除非您有特定的原因想使用SHA256作为PBKDF2哈希,否则更改它并没有坏处
通过调整PBKDF2_NAME
参数,可以相对轻松地更改我的存储库中的算法。SHA1仍然可以安全地与PBKDF2一起使用,因此您可以简单地调整:
private final static String PBKDF2_NAME = "PBKDF2WithHmacSHA256";
致:
在Android代码和PHP更改中:
define("PBKDF2_NAME", "sha256");
致:
同样值得注意的是,如果你用它作为运输安全,你不应该这样做。您应该使用TLS。您可以通过使用其他工具来绕过它,例如
PBKDF2withHmacSHA1
。或者您可以按照规范自己实现它来绕过它。对于API<26,我将使用PBKDF2withHmacSHA1
,对于API>=26,我将使用PBKDF2WithHmacSHA256
。虽然SHA1在PBKDF2算法的HMAC中使用时应该是安全的,但它已经过时,应该尽快在任何地方删除。同意@James。当使用SHA-1作为PRF时,您应该可以。有一些细微差别,因此请确保您正确使用了带有HMACSHA256的PBKDF2,以维护组合的安全性。还有,谢谢你,卢克。很好的收集例子。对于像我这样的noob来说非常有用。Luke,我的目的也是使用您的PHP示例。@dcd4u2查看我的编辑。请密切关注我对TLS的评论。您不应该将代码示例用作传输安全性。
define("PBKDF2_NAME", "sha256");
define("PBKDF2_NAME", "sha1");