A cryptography library for use pointycastle in dart and flutter. this package provides password encryption and data encryption.
For using Cryptography adding this package to your pubspec.yaml file
flutter pub add cryptography
PasswordEncryption use PBKDF2 algorithm to hash passwords.
PBKDF2 takes as input a password, a salt, an integer defining how many “iterations” of the hash function to undergo, and an integer describing the desired key length for the output.
to Initial PasswordEncryption
final passwordEncryption = PasswordEncryption.initial(difficulty: HashDifficulty.strong);
then hash a password:
final hashedPwd = passwordEncryption.hash("pa$$w0rd");
// if you want base64 encoded password use hashB64() instead.
final b64StringHashedPwd = passwordEncryption.hashB64("pa$$w0rd");
to verify hashed password:
final hashedPwd = passwordEncryption.verify("pa$$w0rd");
// if you have base64 encoded password use hashB64() instead.
final b64StringHashedPwd = passwordEncryption.verifyB64("pa$$w0rd");
DataEncryption use AES encryption methods to encrypt data.
How AES works?
The Advanced Encryption Standard (AES) works by taking plain text or binary data and converting it into cipher text, which is made up of seemingly random characters. Only those who have the special key can decrypt it. AES uses symmetric key encryption, which involves the use of only one secret key to cipher and decipher information.
Data Encryption work with plaint text or files. make sure to read theme as bytes. Initial Data Encryption :
final DataEncryption dataEncryption = DataEncryption.initial(
secretKey: '1a2b3c4d', mode: AESMode.cbc, iv: 'q1w2e3r4');
to encrypt data you should convert data to byte array.
For plaint text data you can use the following methods:
final plainText = "plain text data";
final Uint8List dataAsBytes = CryptoHelpers.toBytes(plainText);
// Or using extension like :
final Uint8List dataAsBytes = plainText.toBytes();
For files you can use the following methods:
final fileData =
await File("~/Pictures/my_profile.png").readAsBytes();
final encryptedData = await dataEncryption.encrypt(fileData);
// for base64 string encoding:
final encryptedData = await dataEncryption.encryptB64(fileData);
to decrypt encryptedData use the following methods:
final decryptedData = await dataEncryption.decrypt(encryptedData);
// if your encrypt data was base64 using decryptB64 methods:
final decryptedData = await dataEncryption.decryptB64(encryptedData);