# encrypter_plus **Repository Path**: flyelf/encrypter_plus ## Basic Information - **Project Name**: encrypter_plus - **Description**: crypto - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: 5.x - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-30 - **Last Updated**: 2025-10-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # encrypter_plus [![Pub Package](https://img.shields.io/pub/v/encrypt.svg)](https://pub.dartlang.org/packages/encrypter_plus) [![Dart CI](https://github.com/amorenew/encrypter_plus/actions/workflows/dart.yaml/badge.svg)](https://github.com/amorenew/encrypter_plus/actions/workflows/dart.yaml) [![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=E4F45BFVMFVQW) A set of high-level APIs over pointycastle () for two-way cryptography. A fork of encrypt (). > Looking for password hashing? Please, visit [password](https://github.com/leocavalcante/password-dart). ### Secure random You can generate cryptographically secure random keys and IVs for you project. Activate the encrypter_plus package: ```bash pub global activate encrypter_plus ``` Then use the `secure-random` command-line tool: ```bash $ secure-random CBoaDQIQAgceGg8dFAkMDBEOECEZCxgMBiAUFQwKFhg= ``` You can set the length and the base output. ```bash $ 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 ```dart import 'package:encrypter_plus/encrypter_plus.dart'; void main() { 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 elit print(encrypted.base64); // R4PxiU3h8YoIRqVowBXm36ZcCeNeZ4s1OvVBTfFlZRdmohQqOpPQqD1YecJeZMAop/hZ4OxqgC1WtwvX/hP9mw== } ``` ##### Modes of operation Default mode is SIC `AESMode.sic`, you can override it using the `mode` named parameter: ```dart 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: ```dart final encrypter = Encrypter(AES(key, mode: AESMode.cbc, padding: null)); ``` #### Salsa20 ```dart import 'package:encrypter_plus/encrypter_plus.dart'; void main() { 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 elit print(encrypted.base64); // CR+IAWBEx3sA/dLkkFM/orYr9KftrGa7lIFSAAmVPbKIOLDOzGwEi9ohstDBqDLIaXMEeulwXQ== } ``` #### [Fernet](https://github.com/fernet/spec/blob/master/Spec.md) ```dart import 'package:encrypter_plus/encrypter_plus.dart'; import 'dart:convert'; void main() { 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 itself final 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 elit print(encrypted.base64); // random cipher text print(fernet.extractTimestamp(encrypted.bytes)); // unix timestamp } ``` ### Asymmetric #### RSA ```dart import 'dart:io'; import 'package:encrypter_plus/encrypter_plus.dart'; import 'package:pointycastle/asymmetric/api.dart'; void main() { final publicKey = await parseKeyFromFile('test/public.pem'); final privKey = await parseKeyFromFile('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 elit print(encrypted.base64); // kO9EbgbrSwiq0EYz0aBdljHSC/rci2854Qa+nugbhKjidlezNplsEqOxR+pr1RtICZGAtv0YGevJBaRaHS17eHuj7GXo1CM3PR6pjGxrorcwR5Q7/bVEePESsimMbhHWF+AkDIX4v0CwKx9lgaTBgC8/yJKiLmQkyDCj64J3JSE= } ``` ### Signature and verification #### RSA ```dart final publicKey = await parseKeyFromFile('test/public.pem'); final privateKey = await parseKeyFromFile('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=')); ```