#encryption #dart #flutter #aes #password-encryption
#шифрование #dart #flutter #aes #шифрование паролем
Вопрос:
Я хочу использовать AES-шифрование данных для http-запросов во flutter. У меня есть пароль и строка открытого текста, которую я хочу зашифровать. Я использую flutter_string_encryption. Я добился этого в приложении для iOS, но оба результата отличаются.
final salt = await cryptor.generateSalt();
final generatedKey = await cryptor.generateKeyFromPassword(password, salt);
final String encrypted = await cryptor.encrypt(string, generatedKey);
Комментарии:
1. Если целью является шифрование сетевого вызова. Я бы рекомендовал протокол TLS (HTTPS), который решил бы проблему. Вам также нужно будет закрепить сертификат / PubKey в приложении, чтобы сделать его полностью защищенным.
2. На самом деле требуется зашифровать данные в запросе. Но сравнение зашифрованного текста отличается. Я думаю, это из-за final salt = await cryptor.GenerateSalt(); соль генерируется случайным образом.
3. Да, должно быть известно, что salt шифрует / расшифровывает на обоих концах.
4. Не удалось получить зашифрованные данные, можете ли вы предложить некоторые источники для того же?
Ответ №1:
Есть ли у вас какое-либо конкретное вложение в flutter_string_encryption? Я написал пользовательский пакет, основанный на PointyCastle и полностью написанный на Dart, который может решить AES за вас.
https://pub.dev/packages/steel_crypt
Реализовано примерно так:
var fortunaKey = CryptKey().genFortuna(); //generate 32 byte key with Fortuna; you can also enter your own
var nonce = CryptKey().genDart(len: 12); //generate IV for AES with Dart Random.secure(); you can also enter your own
var aesEncrypter = AesCrypt(key: fortunaKey, padding: PaddingAES.pkcs7); //generate AES encrypter with key and PKCS7 padding
String encrypted = aesEncrypter.gcm.encrypt(inp: 'somedatahere', iv: nonce); //encrypt using GCM
String decrypted = aesEncrypter.gcm.decrypt(inp: encrypted, iv: nonce); //decrypt
Ответ №2:
Ответ AKushWarrior правильный, но если вы не хотите использовать солевой ключ, все в порядке, вы можете напрямую использовать свой ключ шифрования
encryptionKey ="qwertyuiop";//your encryption key
var Encrypter = AesCrypt(encryptionKey, 'cbc', 'pkcs7');
//using AES : CBC/ECB , encryptionKey and PKCS7 padding
EncryptedData = Encrypter.encrypt("hello world");//your data instead of Hello world
DecryptedData = Encrypter.decrypt(EncryptedData);
Комментарии:
1. Это серьезно небезопасно. Если вы шифруете с использованием одного и того же ключа более одного раза, вам потребуется IV. security.stackexchange.com/questions/35210 /…