2017-01-03 130 views
0

我想要一個使用對稱算法(AES)的Android數據庫。相同的哈希函數

在密碼學中是有功能如下

some_function(a-4-digit-PIN, some_salt) { 

    return some_hash; 

} 

4位PIN和鹽是互補的,並且可以變化但功能應該產生取其組合它們可以是相同的散列。

想法是通過文本消息(以支持離線情況)將設備上存儲的鹽和4位PIN碼發送給用戶。

每個用戶在手機上都有自己的鹽店(當電話可以連接到互聯網時,這些鹽會定期從中央數據庫更新)。

該函數生成的哈希用於爲數據庫生成密碼,因此它應該始終保持一致。

實質上,是否有一個函數/算法,其中多個PIN鹽對產生相同的散列。

回答

0

您可以使用PBKDF2WithHmacSHA1並提供鹽。經過一些迭代後,它將從您的密碼生成一個SecretKey。看到在這個鏈路AES加密和鹽生成的一個完整的例子:

http://www.coderzheaven.com/2013/03/19/encrypt-decrypt-file-aes-algorithm-android/

public static SecretKey generateKey(char[] passphraseOrPin, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException { 
    // Number of PBKDF2 hardening rounds to use. Larger values increase 
    // computation time. You should select a value that causes computation 
    // to take >100ms. 
    final int iterations = 1000; 

    // Generate a 256-bit key 
    final int outputKeyLength = 256; 

    SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); 
    KeySpec keySpec = new PBEKeySpec(passphraseOrPin, salt, iterations, outputKeyLength); 
    SecretKey secretKey = secretKeyFactory.generateSecret(keySpec); 
    return secretKey; 
}