AES Encryption in dart 2
Solution 1
AES has a fixed block size of 128 bits and a key size of 128, 192, or 256 bits, So you can try to use Salsa20 instead
Solution 2
For anyone coming here now, I wrote a custom package based off PointyCastle and written entirely in Dart which can greatly simplify AES for you.
https://pub.dev/packages/steel_crypt
It looks something like this implemented:
var fortunaKey = CryptKey().genFortuna(); //generate 32 byte key with Fortuna; you can also enter your own
var nonce = CryptKey().genDart(len: 12); //generate IV for AES with Dart Random.secure(); you can also enter your own
var aesEncrypter = AesCrypt(key: fortunaKey, padding: PaddingAES.pkcs7); //generate AES encrypter with key and PKCS7 padding
String encrypted = aesEncrypter.gcm.encrypt(inp: 'somedatahere', iv: nonce); //encrypt using GCM
String decrypted = aesEncrypter.gcm.decrypt(inp: encrypted, iv: nonce); //decrypt
This solves any issues with block size that may have occurred earlier.
sofiane khoudour
A master degree student major in telecomunication systems , also the founder of secureTalk and The Free Education.
Updated on December 07, 2022Comments
-
sofiane khoudour over 1 year
I've been trying to Encrypt a string using encrypt to send it to a webserver but i kept getting errors. this is my function :
void encRypt(String da){ final key = "my32lengthsupersecretnooneknows1"; final encrypter = new Encrypter(new AES(key)); final encrypted = encrypter.encrypt(da); print(encrypted); }
this is how i used my function : encRypt(chatBody.text); and chatBody is a TextEditingController
this my Debug Console :
Launching lib/main.dart on GT I9500 in debug mode... Built build/app/outputs/apk/debug/app-debug.apk. I/Timeline(19551): Timeline: Activity_idle id: android.os.BinderProxy@34db68a4 time:15254411 E/ (19551): [android_ws] Format: 5, Width: 1080, Height: 1920 E/ (19551): [android_ws] Format: 5, Width: 1080, Height: 1920 D/ViewRootImpl(19551): ViewPostImeInputStage ACTION_DOWN D/ViewRootImpl(19551): ViewPostImeInputStage ACTION_DOWN D/ViewRootImpl(19551): ViewPostImeInputStage ACTION_DOWN E/flutter (19551): [ERROR:flutter/shell/common/shell.cc(181)] Dart Error: Unhandled exception: E/flutter (19551): Invalid argument(s): Input buffer too short E/flutter (19551): #0 AESFastEngine.processBlock (package:pointycastle/block/aes_fast.dart:113:7) E/flutter (19551): #1 AES._processBlocks (package:encrypt/src/aes.dart:42:25) E/flutter (19551): #2 AES.encrypt (package:encrypt/src/aes.dart:22:20) E/flutter (19551): #3 Encrypter.encrypt (package:encrypt/encrypt.dart:17:17) E/flutter (19551): #4 StartPageState.encRypt (file:///home/sofiane/flutter/prog/testone/lib/pages/startpage.dart:28:29) E/flutter (19551): #5 StartPageState.getData (file:///home/sofiane/flutter/prog/testone/lib/pages/startpage.dart:39:6) E/flutter (19551): <asynchronous suspension> E/flutter (19551): #6 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14) E/flutter (19551): #7 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30) E/flutter (19551): #8 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24) E/flutter (19551): #9 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9) E/flutter (19551): #10 TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7) E/flutter (19551): #11 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9) E/flutter (19551): #12 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12) E/flutter (19551): #13 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11) E/flutter (19551): #14 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:143:19) E/flutter (19551): #15 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:121:22) E/flutter (19551): #16 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:101:7) E/flutter (19551): #17 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:64:7) E/flutter (19551): #18 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:48:7) E/flutter (19551): #19 _invoke1 (dart:ui/hooks.dart:153:13) E/flutter (19551): #20 _dispatchPointerDataPacket (dart:ui/hooks.dart:107:5) V/ActivityThread(19551): updateVisibility : ActivityRecord{1fd79a2f token=android.os.BinderProxy@34db68a4 {com.example.testone/com.example.testone.MainActivity}} show : true Application finished. Exited (sigint)
I tried everything as the example was shown on the github page of the package encrypt github it didn't work.