我有一個網站來加密和解密文件,我想創建一個flutter應用程序來用相同的格式加密和解密,但我不知道如何做到,下面是加密的格式
openssl aes-256-cbc -d -salt -pbkdf2 -iter 10000 -in encryptedfilename -out plaintextfilename
關于如何使用上面的格式創建加密/解密函數,有什么建議嗎?我已經嘗試了大部分flutter加密包,但沒有找到任何解決方案
static Future<File?> aesEncryptTest(String password, File file) async {
final _password = Password.hash(password, PBKDF2());
var bytes = utf8.encode(_password);
var digest = sha256.convert(bytes);
var fDigest = md5.convert(digest.bytes);
final key = Key.fromUtf8(fDigest.toString());
final iv = IV.fromLength(16);
final encrypter = Encrypter(AES(key, mode: AESMode.cbc, padding: "PKCS7"));
final fileBytes = await file.readAsBytes();
final encryptedData = encrypter.encryptBytes(fileBytes, iv: iv);
File _file =
await File(file.path + '.enc').writeAsBytes(encryptedData.bytes);
_file.writeAsBytesSync(encryptedData.bytes);
await FileServices.saveFile(_file.path);
return encryptedFile;
}
static Future<File?> aesDecryptTest(String password, File file) async {
final _password = Password.hash(password, PBKDF2());
var bytes = utf8.encode(_password);
var digest = sha256.convert(bytes);
var fDigest = md5.convert(digest.bytes);
final key = Key.fromUtf8(fDigest.toString());
final iv = IV.fromLength(16);
final encrypter = Encrypter(AES(key, mode: AESMode.cbc, padding: "PKCS7"));
final fileBytes = await file.readAsBytes();
final decryptedBytes = encrypter.decryptBytes(Encrypted(fileBytes), iv: iv);
File _file =
await File(withoutExtension(file.path)).writeAsBytes(decryptedBytes);
_file.writeAsBytesSync(decryptedBytes);
await FileServices.saveFile(_file.path, extraName: 'DECRYPTED');
return File(decryptedFile);
}
對于加密,在Dart代碼中:
Salted__
的ASCII編碼加上8字節的salt加上密文。一種可能的實施方式是:
with
以這種方式生成的密文可以使用發布的OpenSSL聲明進行解密(順便說一句,該聲明用于解密而非加密)。
這里必須考慮到,OpenSSL在早期版本中使用MD5作為默認摘要,在v1.0中使用SHA256。上面的代碼采用SHA256。如果您有較舊的OpenSSL版本,則可以在OpenSSL語句中設置
-md sha256
?;蛘?,該代碼必須適應MD5。對于解密,在Dart代碼中:
該實現類似于加密:
with