deriveKey static method
PBKDF2密钥派生 - 从密码生成加密密钥
Implementation
static Uint8List deriveKey({
required String password,
required Uint8List salt,
int keyLength = 32,
}) {
final hmac = Hmac(sha256, utf8.encode(password));
var derivedKey = <int>[];
var block = <int>[];
for (int blockNum = 1; derivedKey.length < keyLength; blockNum++) {
// 初始化block为HMAC(salt || INT(i))
block = hmac.convert([...salt, ..._intToBytes(blockNum)]).bytes;
var u = block;
// 迭代计算
for (int iter = 1; iter < _iterations; iter++) {
u = hmac.convert(u).bytes;
for (int i = 0; i < block.length; i++) {
block[i] ^= u[i];
}
}
derivedKey.addAll(block);
}
return Uint8List.fromList(derivedKey.take(keyLength).toList());
}