我想使用PBKDF2WithHmacSHA1生成密鑰,但在android上計算需要很長的時間。我在iOS上使用與普通加密相同數量的迭代,並且它需要大約6秒鐘,因爲在android上它需要100秒。PBKDF2WithHmacSHA1密鑰生成在Android上花費太長時間
下面是代碼:
public static String generateStorngPasswordHash(String password)
{
try
{
char[] chars = password.toCharArray();
byte[] salt = getSalt();
PBEKeySpec spec = new PBEKeySpec(chars, salt, 1010101, 32 * 8);
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
byte[] hash = skf.generateSecret(spec).getEncoded();
return toHex(salt) + ":" + toHex(hash);
} catch (Exception e)
{
Logger.e("Exception: Error in generating password" + e.toString());
}
return "";
}
private static byte[] getSalt() throws NoSuchAlgorithmException
{
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
byte[] salt = new byte[32];
sr.nextBytes(salt);
return salt;
}
請讓我知道是否有這個代碼的任何問題嗎?
編輯
還有一兩件事,我也是在我的應用程序中使用sqlCipher。他們使用openssl來計算PKDF2,並且我在某處讀到openssl實現比java實現要快得多來找到PKDF2。所以我的問題是:
- 這是真的,openssl可以給我更好的android性能嗎?
- 我可以使用sqlCipherg中使用的openssl實現嗎?
- 如果是的話我該如何使用openssl使用caclulate PKDF2?
- 如果沒有,那麼我怎樣才能使用openssl在Android中查找PBKDF2WithHmacSHA1。我通過網絡搜索了
但沒有找到任何示例。
有與該代碼沒有問題。這是關於緩慢的android加密一小時內的第二個問題,請檢查[第一個和問題鏈接到它](http://stackoverflow.com/questions/24650619/image-encryption-decryption-between-php-and-android )。 –
您使用哪種Android手機進行測試?希望你不是在談論模擬器... – Robert
你確定iOS代碼是相同的嗎?在3.6GHz Core i5上執行J2SE中的generateStorngPasswordHash()大約需要2.2秒... – Robert