Usage
encrypt:
Future<Map?> encrypt(List<int> data, List<int> key)
this method returns Map of {
encrypted: List<int>,
tag: List<int>,
nonce: List<int>
}
// tag: authentication tag or MAC (message authentication code), the algorithm uses it to verify whether or not the ciphertext (encrypted data) and/or associated data have been modified.
// nonce: (or “initialization vector”, “IV”, “salt”) is a unique non-secret sequence of data required by most cipher (encryption) algorithms, making the ciphertext (encrypted data) unique despite the same key
encryptString:
Future<Map?> encryptString(String string, String key, String keyEncoding, String outputEncoding)
this method takes inputs of UTF8 string, key in base64 or hex encoding string depending on keyEncoding
this method returns Map of {
encrypted: String (in base64 or hex encoded string depending on outputEncoding),
tag: String (in base64 or hex encoded string depending on outputEncoding),
nonce: String (in base64 or hex encoded string depending on outputEncoding)
}
decrypt:
Future<List<int>?>decrypt(List<int> encrypted, List<int> key, List<int> nonce, List<int> tag)
this method returns List
decryptString:
Future<String?>decryptString(String inputEncoding, String encryptedString, String key, String nonce, String tag)
this method takes inputs in base64 or hex encoding string depending on inputEncoding
this method returns String in UTF8
try {
final key =
await FlutterKeyGenerator.generateSymmetricKey(256);
print("256 bit key: ${key}");
// new unique key will be generated every time generateSymmetricKey is run
// [116, 89, 78, 246, 24, 145, 69, 153, 89, 21, 182, 39, 208, 83, 28, 190, 10, 254, 168, 181, 192, 9, 37, 129, 186, 197, 78, 107, 111, 196, 119, 250]
if (key != null) {
/*
/ Data in bytes encryption:
*/
print("=================================================================================================================================================");
print("Data in bytes encryption:");
final data = [1, 2, 3];
final sealedBox = await FlutterChacha20Poly1305.encrypt(data, key);
print("Encrypted: ${sealedBox}");
// Data in this object will be unique every time FlutterChacha20Poly1305.encrypt(data, key); is run
// {
// encrypted: [48, 140, 193],
// tag: [2, 233, 22, 168, 82, 89, 110, 176, 158, 180, 147, 83, 250, 56, 15, 97],
// nonce: [186, 194, 249, 80, 235, 2, 210, 108, 23, 3, 133, 172]
// }
final encrypted = [48, 140, 193];
final uniqueKey = [116, 89, 78, 246, 24, 145, 69, 153, 89, 21, 182, 39, 208, 83, 28, 190, 10, 254, 168, 181, 192, 9, 37, 129, 186, 197, 78, 107, 111, 196, 119, 250];
final nonce = [186, 194, 249, 80, 235, 2, 210, 108, 23, 3, 133, 172];
final tag = [2, 233, 22, 168, 82, 89, 110, 176, 158, 180, 147, 83, 250, 56, 15, 97];
final decryptedData = await FlutterChacha20Poly1305.decrypt(encrypted, uniqueKey, nonce, tag);
print("Decrypted bytes: ${decryptedData} \n\n");
// Decrypted bytes: [1, 2, 3]
/*
/ Data in string encryption with key, nonce, tag in base64 or hex encoding
*/
print("=================================================================================================================================================");
print("Data in string encryption with key, nonce, tag in base64 or hex encoding:");
final jsonString = "{ x: 1, y: 2, z: 3 }";
final keyInBase64 = "LAnIp48R+r525MH9kme671+2Z2sta+yRGGmA783KBl8=";
final keyEncoding = "base64";
final outputEncoding = "base64"; // or "hex"
final encryptStringObject = await FlutterChacha20Poly1305.encryptString(jsonString, keyInBase64, keyEncoding, outputEncoding);
print("String encrypted object: ${encryptStringObject}");
// Data in this object will be unique every time FlutterChacha20Poly1305.encryptString(jsonString, keyInBase64, keyEncoding, outputEncoding) is run
// {
// tag: T/dbBWayYCdN+yvOvGU61Q==,
// encrypted: +OxmNIVA6gvwOCoQJAalHQS4Baw=,
// nonce: j43/wSHX6Dh6jIAF
// }
final inputEncoding = "base64"; // all the params below must be in base64 encoded string
final encryptedString = "+OxmNIVA6gvwOCoQJAalHQS4Baw=";
final tagBase64 = "T/dbBWayYCdN+yvOvGU61Q==";
final nonceBase64 = "j43/wSHX6Dh6jIAF";
final decryptedJSONString = await FlutterChacha20Poly1305.decryptString(inputEncoding, encryptedString, keyInBase64, nonceBase64, tagBase64);
print("Decrypted JSON string: ${decryptedJSONString}");
// { x: 1, y: 2, z: 3 }
}
} catch (e) {
print(e);
}
https://github.com/hayr-hotoca/flutter_chacha20_poly1305