Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AES Encryption in dart 2

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

the main errors

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.

like image 972
sofiane khoudour Avatar asked Nov 09 '18 14:11

sofiane khoudour


People also ask

What is AES 256bit encryption?

256-bit AES encryption refers to the process of concealing plaintext data using the AES algorithm and an AES key length of 256 bits. In addition, 256 bits is the largest AES key length size, as well as its most mathematically complex. It is also the most difficult to crack.

Does AES use 2 keys?

There would be two keys: a client keys that would be generated for each client and a single server/application key used by everyone. The idea is to be able to encrypt/decrypt the data only if we are in possession of both keys. So neither the server nor the client could decrypt the data alone.

How do you encrypt in flutter?

To implement the following project you need to integrate the crypto package into your Flutter app. Add dependencies to pubspec — yaml file. Now in your Dart code, you can use the following import this package. import 'package:crypto/crypto.


2 Answers

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

  • the issue
like image 161
Raouf Rahiche Avatar answered Oct 19 '22 18:10

Raouf Rahiche


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.

like image 2
AKushWarrior Avatar answered Oct 19 '22 20:10

AKushWarrior