2017-01-03 12 views
0

私は対称アルゴリズム(AES)を使ってAndroidデータベースに行きたいです。暗号で同じハッシュ関数

関数は

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

    return some_hash; 

} 

4桁のPINと塩、以下のように存在する相補的であり、変化することができるが、関数は、彼らができるいずれの組み合わせ同一のハッシュを生成しなければなりません。

アイデアは、デバイスに保存されている塩と4桁の暗証番号を(オフラインの状況をサポートするために)テキストメッセージでユーザーに伝えることです。

各ユーザーは電話で自分のソルトストアを持っています(これらの塩は電話機がインターネットに接続できるときに中央のデータベースから定期的に更新されます)。

この関数によって生成されたハッシュは、データベースのパスワードを生成するために使用されるため、常に同じにする必要があります。

本質的に、複数のPIN-saltペアが同じハッシュを生成する関数/アルゴリズムがあります。

答えて

0

PBKDF2WithHmacSHA1を使用して塩を提供することができます。いくつかの反復後にパスワードからSecretKeyが生成されます。

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; 
} 
:このリンクでAES暗号化と塩の生成の完全な例を参照してください。