0

我正在 dart 中构建一个简单的加密工具。

我需要用密码加密我的 rsa 私钥。

我正在使用 AES 进行加密。

AES 要求密钥是特定的编号。位。

在我的情况下是 256 位。

我要求用户输入至少 16 个字符(128 位)的密码。

因此,我需要将密码短语扩展到完整的 256 位。

目前我只是将密码加倍,然后将结果剪辑为 256 位。

这是正确的做法还是填充密钥的更安全方法?

我正在使用基于 java bouncycastle 库的 dart pointycastle 库。


更新

这是我最近的尝试

class StrongKey extends Key {
  StrongKey.fromPassPhrase(String passPhrase) : super.fromUtf8(passPhrase);

  Key secureStretch(Uint8List salt) {
    return stretch(256, iterationCount: 100000, salt: salt);
  }

  @override
  Key stretch(int desiredKeyLength, {int iterationCount = 100, Uint8List salt}) {
    final params = Pbkdf2Parameters(salt, iterationCount, desiredKeyLength);
    final pbkdf2 = PBKDF2KeyDerivator(Mac('SHA-512/HMAC'))..init(params);

    return Key(pbkdf2.process(bytes));
  }

  static Uint8List get generateSalt => SecureRandom(256).bytes;
}
4

0 回答 0