【问题标题】:PBKDF2WithHmacSHA512 throwing NoSuchAlgorithmExceptionPBKDF2WithHmacSHA512 抛出 NoSuchAlgorithmException
【发布时间】:2014-04-19 10:01:55
【问题描述】:

我正在 Eclipse 中为 android 编写一个应用程序。我一开始尝试使用 PBKDF2WithHmacSHA1 来散列我的密码,效果很好。但由于 SHA1 的弱点,我决定将其升级为 PBKDF2WithHmacSHA512。但是,eclipse 现在抛出 NoSuchAlgorithmException。

SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512") throws NoSuchAlgorithmException

我按照上面链接中的说明进行操作。但是,上面问题中链接的 java 文件需要 sun.crypto 库,我在 Eclipse 上没有。我也被建议不要使用 Sun 库,而是使用 java 官方库。

我的问题是,是否有在 Eclipse 上使用 PBKDF2WithHmacSHA512 的方法?或者,如果可能的话,有人可以教我如何将其分解为首先执行 PBKDF2 然后是 HmacSHA512 结果的部分吗?

谢谢。

【问题讨论】:

  • “SHA1 中的安全漏洞”
  • 对不起,不是安全漏洞,而是与 SHA2 相比的弱点。无论哪种方式,我已经阅读了无数关于使用 SHA256 或 SHA512 而不是 SHA1 的建议。我会编辑我的问题,谢谢。
  • 嗯,是的,与 SHA256 和 SHA512 相比,SHA1 较弱,但这确实是相对的...... SHA1 对于很多需求来说足够强大。 MD5 也比 SHA1 弱。
  • 无论如何——你看过bouncycastle吗?
  • 其实我有。但是我目前正在决定反对它(但仍在争论),因为我只在我的应用程序中使用这种特定算法使用散列一次,所以我不确定是否值得将整个 api 包含到我的应用程序中。如果可能的话,这将是我最后的选择。

标签: java algorithm hash


【解决方案1】:

在android中使用SecretKeyFactory时要小心,请检查支持的API版本,如果使用错误的版本会出现异常,如下所示:https://developer.android.com/reference/javax/crypto/SecretKeyFactory

当请求特定加密算法但在环境中不可用时,将引发此异常。所以基于上面的需求?如果你也想在低安卓版本上使用这个算法,我推荐你使用Bouncy Castle Library。

// Gradle

implementation 'org.bouncycastle:bcpkix-jdk15to18:1.70'
implementation 'org.bouncycastle:bcprov-jdk15to18:1.70'


// Use "PBKDF2WithHmacSHA512" with android O version and above

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  val skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512")
  val pwSpec = PBEKeySpec(secret.toCharArray(), salt, iterations, keyLength)
  skf.generateSecret(pwSpec).encoded
}

【讨论】:

    猜你喜欢
    • 2014-01-15
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多