Orientação gerada a partir de informações públicas. Apenas para referência.
O pacote encrypt fornece APIs de alto nível e fáceis de usar para criptografia bidirecional em aplicativos Flutter, construído sobre o PointyCastle. Simplifica os processos de criptografia e descriptografia com suporte a diversos algoritmos, como AES, RSA e DES. Projetado para desenvolvedores que precisam de manipulação segura de dados, permite armazenamento seguro e transmissão de informações sensíveis entre múltiplas plataformas. O pacote abstrai as complexidades criptográficas de baixo nível, tornando o código seguro acessível mesmo para quem não possui profundo conhecimento em criptografia.
Casos de uso
Armazenamento seguro de dados
Criptografando credenciais do usuário
Comunicação segura entre cliente e servidor
Proteger dados sensíveis do aplicativo
Implementando criptografia de ponta a ponta
Autenticação baseada em token
Principais recursos
Suporte para AES, RSA e DES
API simples e intuitiva
Compatibilidade multiplataforma
Integração com PointyCastle
Opções de preenchimento e modo embutidos
Gerenciamento flexível de chave e IV
Indicado para
Aplicativos que exigem confidencialidade de dados
Desenvolvedores novos em criptografia
Projetos que precisam de armazenamento local seguro
Aplicações que lidam com informações de usuário sensíveis
Aplicativos multiplataforma com necessidades de segurança
Considerações
Requer gerenciamento cuidadoso da chave
Não adequado para hash de senha
Depende da estabilidade do PointyCastle
Deve ser usado com tratamento adequado de erros
Melhor combinado com soluções de armazenamento de chaves seguras
Evite codificar chaves diretamente no código-fonte
README original
Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.
[!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='));