gpt4 book ai didi

dart - 如何在 flutter dart 中像 android 的 "PBEWithMD5AndDES"那样进行加密?

转载 作者:IT王子 更新时间:2023-10-29 07:19:36 25 4
gpt4 key购买 nike

我正在尝试将现有的移动应用重新创建为 flutter,但在 android 上的“PBEWithMD5AndDES”加密中苦苦挣扎,我似乎无法在 dart 中找到类似的方法。

到目前为止,这是我尝试使用 Flutter_Des.dart、Password_Hash.dart 和 Crypto.dart 库实现的相同结果,但仍然无法获得相同的输出。

encryptPassword(String keyStr, String passwordStr) async {
if (keyStr.length == 0 || passwordStr.length == 0) {
return "";
}

var generator = new PBKDF2(hashAlgorithm: md5);
String saltStr = generateSaltBase64String();

var hash = generator.generateBase64Key(keyStr, saltStr, round, keyLength);
var encryptBase64 = await FlutterDes.encryptToBase64(passwordStr, hash.toString());

return encryptBase64;
}

以下是我目前在 Android 上的内容。

KeySpec keySpec = new PBEKeySpec(str.toCharArray(), salt, iterationCount);
SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);
AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);
ecipher = Cipher.getInstance("PBEWithMD5AndDES");

ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
byte[] utf8 = password.getBytes("UTF8");
byte[] enc = ecipher.doFinal(utf8);
enc = Base64.encode(enc, Base64.DEFAULT);
return new String(enc);

我期待与 android 相同的输出,以便我的后端能够解密它。

最佳答案

PBEWithMD5AndDES 使用 PBKDF1 生成 key Material (不是 PBKDF2)。这为您提供了 128 位的 key Material ,然后您将其用作两个 64 位的一半作为 key 和 DES 的 IV。

按如下方式导出 key 和 IV - 我插入了一些任意值用于迭代、密码和盐,并根据 JCrypto 进行了确认。

  int iterations = 31;

List<int> salt = [0x21, 0x21, 0xf0, 0x55, 0xc3, 0x9f, 0x5a, 0x75];
List<int> password = utf8.encode('test');

List<int> saltedKey = password + salt;

Digest d = md5.convert(saltedKey);
for (int i = 1; i < iterations; i++) {
d = md5.convert(d.bytes);
}

print(d);

List<int> key = d.bytes.sublist(0, 8);
List<int> iv = d.bytes.sublist(8, 16);
print(key);
print(iv);

我找不到以 key 和 IV 作为字节的 DES 的 Dart 实现。 triple_des 希望它们作为字符串 - 即它被简化了。 Pointy caSTLe 不做 DES。 FlutterDes 似乎也需要字符串。您可以修改 triple_des 以获取二进制 key 和 IV。或者使用不同的密码。

关于dart - 如何在 flutter dart 中像 android 的 "PBEWithMD5AndDES"那样进行加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56270370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com