Does anyone have an idea about encrypting response from my php api and decrypting data in local using dart. I'm using flutter for my mobile application.
Thank You!
Here is a method for encrypting/decrypting in Flutter, PHP and C# using AES-256-CBC algorithm.
AES-256 is considered quantum-safe.
Include the package https://pub.dev/packages/encrypt
import 'dart:convert';
import 'package:encrypt/encrypt.dart';
import 'package:crypto/crypto.dart';
class Encryption {
static final Encryption instance = Encryption._();
late IV _iv;
late Encrypter _encrypter;
Encryption._() {
const mykey = 'ThisIsASecuredKey';
const myiv = 'ThisIsASecuredBlock';
final keyUtf8 = utf8.encode(mykey);
final ivUtf8 = utf8.encode(myiv);
final key = sha256.convert(keyUtf8).toString().substring(0, 32);
final iv = sha256.convert(ivUtf8).toString().substring(0, 16);
_iv = IV.fromUtf8(iv);
_encrypter = Encrypter(AES(Key.fromUtf8(key), mode: AESMode.cbc));
}
String encrypt(String value) {
return _encrypter.encrypt(value, iv: _iv).base64;
}
String decrypt(String base64value) {
final encrypted = Encrypted.fromBase64(base64value);
return _encrypter.decrypt(encrypted, iv: _iv);
}
}
Usage (Singleton Class):
var encrypted = Encryption.instance.encrypt('my value to be encrypted');
var decrypted = Encryption.instance.decrypt(encrypted);
<?php
class Encryption
{
private string $encryptMethod = 'AES-256-CBC';
private string $key;
private string $iv;
public function __construct()
{
$mykey = 'ThisIsASecuredKey';
$myiv = 'ThisIsASecuredBlock';
$this->key = substr(hash('sha256', $mykey), 0, 32);
$this->iv = substr(hash('sha256', $myiv), 0, 16);
}
public function encrypt(string $value): string
{
return openssl_encrypt(
$value,
$this->encryptMethod,
$this->key,
0,
$this->iv
);
}
public function decrypt(string $base64Value): string
{
return openssl_decrypt(
$base64Value,
$this->encryptMethod,
$this->key,
0,
$this->iv
);
}
}
Usage:
$encryption = new Encryption();
$encrypted = $encryption->encrypt('my value to be encrypted');
$decrypted = $encryption->decrypt($encrypted);
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class Encryption
{
byte[] key;
byte[] iv;
private Encryption instance;
public Encryption Instance
{
get
{
if (instance == null)
instance = new Encryption();
return instance;
}
}
private Encryption()
{
var Key = "ThisIsASecuredKey";
var Iv = "ThisIsASecuredBlock";
using (var sha256 = SHA256.Create())
{
key = Encoding.UTF8.GetBytes(
ToHex(sha256.ComputeHash(Encoding.UTF8.GetBytes(Key)))
.Substring(0, 32)
);
iv = Encoding.UTF8.GetBytes(
ToHex(sha256.ComputeHash(Encoding.UTF8.GetBytes(Iv)))
.Substring(0, 16)
);
}
}
public string Encrypt(string input)
{
using (var aesManaged = new AesManaged())
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(
ms,
aesManaged.CreateEncryptor(key, iv),
CryptoStreamMode.Write
))
{
var inputBytes = Encoding.UTF8.GetBytes(input);
cs.Write(inputBytes, 0, inputBytes.Length);
}
return Convert.ToBase64String(ms.ToArray());
}
}
public string Decrypt(string base64value)
{
using (var aesManaged = new AesManaged())
using (var decryptor = aesManaged.CreateDecryptor(key, iv))
using (var ms = new MemoryStream(Convert.FromBase64String(base64value)))
using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
using (var sr = new StreamReader(cs))
{
return sr.ReadToEnd();
}
}
private string ToHex(byte[] bytes, bool upperCase = false)
{
var result = new StringBuilder(bytes.Length * 2);
for (int i = 0; i < bytes.Length; i++)
result.Append(bytes[i].ToString(upperCase ? "X2" : "x2"));
return result.ToString();
}
}
Usage (Singleton Class):
var encrypted = Encryption.Instance.Encrypt("my value to be encrypted");
var decrypted = Encryption.Instance.Decrypt(encrypted);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With