deriveKey static method

Uint8List deriveKey({
  1. required String password,
  2. required Uint8List salt,
  3. int keyLength = 32,
})

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());
}