我试图重新创建一个现有的移动的应用程序到Flutter,但挣扎在“PBEWithMD5AndDES”加密的Android上,我似乎找不到类似的方式在 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相同的输出,以便我的后端能够解密它。
2条答案
按热度按时间l2osamch1#
PBEWithMD 5AndDES使用PBKDF 1来生成密钥材料(而不是PBKDF 2)。这给了你128位的密钥材料,然后你可以将它们作为两个64位的半部分来使用,作为DES的密钥和IV。
如下导出密钥和IV--我为迭代、密码和盐插入了一些任意值,并根据JCrypto进行了确认。
我找不到一个DES的Dart实现,它需要一个密钥和IV作为字节。
triple_des
希望它们作为字符串-即它被简化了。尖堡不做DES。FlutterDes似乎也想要字符串。您可以修改triple_des
以获取二进制键和IV。或者用别的密码。k10s72fa2#
通过使用flutter的方法通道和调用平台特定的代码来完成加密和它现在的工作。谢谢