我想使用对称算法(AES)的Android数据库。
在密码学中有一个函数如下
some_function( a-4-digit-PIN, some_salt) {
return some_hash;
}
4位数PIN和盐是互补的,可以改变但是功能应该产生相同的散列,无论它们可能是哪种组合。
想法是将盐存储在设备上,并通过短信向用户发送4位数PIN(以支持离线情况)。
每个用户手机上都有自己的盐店(当手机连接到互联网时,这些盐会定期从中央数据库更新。)
此函数生成的哈希用于生成数据库的密码,因此它应始终保持相同。
本质上,是否有一个函数/算法,其中多个PIN-salt对产生相同的散列。
答案 0 :(得分: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;
}