dev
dart 35 lines 1.02 KB
Raw
1 import 'package:encrypt/encrypt.dart' as encrypt;
2
3 const ivEncodedStringLength = 12;
4
5 String generateKey() {
6 final key = encrypt.Key.fromSecureRandom(512);
7 final iv = encrypt.IV.fromSecureRandom(8);
8
9 return key.base64 + iv.base64;
10 }
11
12 List<String> extractKeys(String key) {
13 final _key = key.substring(0, key.length - ivEncodedStringLength);
14 final iv = key.substring(key.length - ivEncodedStringLength);
15
16 return [_key, iv];
17 }
18
19 Future<String> encode(
20 {required encrypt.Key key, required encrypt.IV iv, required String data}) async {
21 final encrypter = encrypt.Encrypter(encrypt.Salsa20(key));
22 final encrypted = encrypter.encrypt(data, iv: iv);
23
24 return encrypted.base64;
25 }
26
27 Future<String> decode({required String password, required String data}) async {
28 final keys = extractKeys(password);
29 final key = encrypt.Key.fromBase64(keys.first);
30 final iv = encrypt.IV.fromBase64(keys.last);
31 final encrypter = encrypt.Encrypter(encrypt.Salsa20(key));
32 final encrypted = encrypter.decrypt64(data, iv: iv);
33
34 return encrypted;
35 }