Aus öffentlichen Paketdaten erstellte Orientierung.
Das encrypt-Paket bietet hochwertige, benutzerfreundliche APIs für die bidirektionale Kryptographie in Flutter-Anwendungen, aufgebaut auf PointyCastle. Es vereinfacht Verschlüsselungs- und Entschlüsselungsprozesse mit Unterstützung verschiedener Algorithmen wie AES, RSA und DES. Speziell für Entwickler konzipiert, die sichere Datenverarbeitung benötigen, ermöglicht es sichere Speicherung und Übertragung sensibler Informationen über mehrere Plattformen hinweg. Das Paket abstrahiert komplexe kryptografische Details auf niedriger Ebene und macht sicheres Codieren auch für Entwickler ohne tiefgehende Kenntnisse in Kryptographie zugänglich.
Anwendungsfälle
Sichere Datenspeicherung
Benutzeranmeldeinformationen verschlüsseln
Sichere Kommunikation zwischen Client und Server
Schutz sensibler App-Daten
Implementierung von Ende-zu-Ende-Verschlüsselung
Tokenbasierte Authentifizierung
Hauptmerkmale
Unterstützung für AES, RSA und DES
Einfaches, intuitives API
Plattformübergreifende Kompatibilität
Integration mit PointyCastle
Eingebaute Paddings- und Modusoptionen
Flexible Schlüssel- und IV-Verwaltung
Geeignet für
Apps, die Datenvertraulichkeit erfordern
Entwickler, die neu in der Kryptographie sind
Projekte, die sichere lokale Speicherung benötigen
Anwendungen, die sensible Benutzerinformationen verarbeiten
Mehrplattform-Anwendungen mit Sicherheitsanforderungen
Hinweise
Erfordert sorgfältige Schlüsselverwaltung
Nicht geeignet für Passwort-Hashing
Abhängig von der Stabilität von PointyCastle
Soll mit geeigneter Fehlerbehandlung verwendet werden
Am besten kombiniert mit sicheren Schlüssel-Speicherlösungen
Vermeiden Sie das Härtecodieren von Schlüsseln im Quellcode
Original-README
Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.
[!CAUTION]
I'm not being able to properly maintain this package, so it is being archived. Feel free to use some fork as an alternative.
encrypt
A set of high-level APIs over PointyCastle for two-way cryptography.
Looking for password hashing? Please, visit password.
Secure random
You can generate cryptographically secure random keys and IVs for you project.
$ secure-random --help
-l, --length The length of the bytes
(defaults to "32")
-b, --base Bytes represented as base 64 or base 16 (Hexdecimal)
(defaults to "64")
-h, --[no-]help Show this help message
Algorithms
Current status is:
AES with PKCS7 padding
RSA with PKCS1 and OAEP encoding
Salsa20
Signing
SHA256 with RSA
Usage
Symmetric
AES
import'package:encrypt/encrypt.dart';
voidmain() {
final plainText = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';
final key = Key.fromUtf8('my 32 length key................');
final iv = IV.fromLength(16);
final encrypter = Encrypter(AES(key));
final encrypted = encrypter.encrypt(plainText, iv: iv);
final decrypted = encrypter.decrypt(encrypted, iv: iv);
print(decrypted); // Lorem ipsum dolor sit amet, consectetur adipiscing elitprint(encrypted.base64); // R4PxiU3h8YoIRqVowBXm36ZcCeNeZ4s1OvVBTfFlZRdmohQqOpPQqD1YecJeZMAop/hZ4OxqgC1WtwvX/hP9mw==
}
Modes of operation
Default mode is SIC AESMode.sic, you can override it using the mode named parameter:
final encrypter = Encrypter(AES(key, mode: AESMode.cbc));
Supported modes are:
CBC AESMode.cbc
CFB-64 AESMode.cfb64
CTR AESMode.ctr
ECB AESMode.ecb
OFB-64/GCTR AESMode.ofb64Gctr
OFB-64 AESMode.ofb64
SIC AESMode.sic
No/zero padding
To remove padding, pass null to the padding named parameter on the constructor:
final encrypter = Encrypter(AES(key, mode: AESMode.cbc, padding: null));
Salsa20
import'package:encrypt/encrypt.dart';
voidmain() {
final plainText = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';
final key = Key.fromLength(32);
final iv = IV.fromLength(8);
final encrypter = Encrypter(Salsa20(key));
final encrypted = encrypter.encrypt(plainText, iv: iv);
final decrypted = encrypter.decrypt(encrypted, iv: iv);
print(decrypted); // Lorem ipsum dolor sit amet, consectetur adipiscing elitprint(encrypted.base64); // CR+IAWBEx3sA/dLkkFM/orYr9KftrGa7lIFSAAmVPbKIOLDOzGwEi9ohstDBqDLIaXMEeulwXQ==
}
import'package:encrypt/encrypt.dart';
import'dart:convert';
voidmain() {
final plainText = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';
final key = Key.fromUtf8('my32lengthsupersecretnooneknows1');
final b64key = Key.fromUtf8(base64Url.encode(key.bytes).substring(0,32));
// if you need to use the ttl feature, you'll need to use APIs in the algorithm itselffinal fernet = Fernet(b64key);
final encrypter = Encrypter(fernet);
final encrypted = encrypter.encrypt(plainText);
final decrypted = encrypter.decrypt(encrypted);
print(decrypted); // Lorem ipsum dolor sit amet, consectetur adipiscing elitprint(encrypted.base64); // random cipher textprint(fernet.extractTimestamp(encrypted.bytes)); // unix timestamp
}
Asymmetric
RSA
import'dart:io';
import'package:encrypt/encrypt.dart';
import'package:pointycastle/asymmetric/api.dart';
voidmain() {
final publicKey = await parseKeyFromFile<RSAPublicKey>('test/public.pem');
final privKey = await parseKeyFromFile<RSAPrivateKey>('test/private.pem');
final plainText = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';
final encrypter = Encrypter(RSA(publicKey: publicKey, privateKey: privKey));
final encrypted = encrypter.encrypt(plainText);
final decrypted = encrypter.decrypt(encrypted);
print(decrypted); // Lorem ipsum dolor sit amet, consectetur adipiscing elitprint(encrypted.base64); // kO9EbgbrSwiq0EYz0aBdljHSC/rci2854Qa+nugbhKjidlezNplsEqOxR+pr1RtICZGAtv0YGevJBaRaHS17eHuj7GXo1CM3PR6pjGxrorcwR5Q7/bVEePESsimMbhHWF+AkDIX4v0CwKx9lgaTBgC8/yJKiLmQkyDCj64J3JSE=
}
Signature and verification
RSA
final publicKey = await parseKeyFromFile<RSAPublicKey>('test/public.pem');
final privateKey = await parseKeyFromFile<RSAPrivateKey>('test/private.pem');
final signer = Signer(RSASigner(RSASignDigest.SHA256, publicKey: publicKey, privateKey: privateKey));
print(signer.sign('hello world').base64);
print(signer.verify64('hello world', 'jfMhNM2v6hauQr6w3ji0xNOxGInHbeIH3DHlpf2W3vmSMyAuwGHG0KLcunggG4XtZrZPAib7oHaKEAdkHaSIGXAtEqaAvocq138oJ7BEznA4KVYuMcW9c8bRy5E4tUpikTpoO+okHdHr5YLc9y908CAQBVsfhbt0W9NClvDWegs='));