I have NestJS api which crypt and decrypt string with next code
export const encryptIV = async (data:string)=>{
try{
const iv = Buffer.from('q2Q@w3W#').toString('hex');
const secretKey = 'H4WtkvK4qyehIe2kjQfH7we1xIHFK67e';
const key = (await promisify(scrypt)(secretKey, 'salt', 32)) as Buffer;
const cipher = createCipheriv(alg, key, iv);
let encryptedText = cipher.update(data,'utf-8','hex');
encryptedText += cipher.final('hex');
return `${encryptedText}`;
} catch (e){
return '';
}
}
export const decryptIV = async (data:string)=>{
try{
if (data.length>0){
const iv = Buffer.from('q2Q@w3W#').toString('hex');
const secretKey = 'H4WtkvK4qyehIe2kjQfH7we1xIHFK67e';
const key = (await promisify(scrypt)(secretKey, 'salt', 32)) as Buffer;
const decipher = createDecipheriv(alg, key, iv);
let decryptedText = decipher.update(data,'hex','utf-8');
decryptedText += decipher.final('utf-8');
return decryptedText;
} else {
return '';
}
} catch (e){
return '';
}
}
Decryption in JS:
IV="7132514077335723"
SecretKey="H4WtkvK4qyehIe2kjQfH7we1xIHFK67e"
EncryptedData="222ef6e4c66c3dfdea9cf1f4828f436e"
AfterDecryption="28c9c0e555b71fda"
ALG="aes-256-ctr"
I’m trying decrypt my encryptedData in dart using “encrypt: ^5.0.3” package with next code:
void decrypt() {
try{
final hexIv = "222ef6e4c66c3dfdea9cf1f4828f436e";
final ivHexIv = enc.IV.fromUtf8("7132514077335723");
final ivKey = enc.Key.fromUtf8('H4WtkvK4qyehIe2kjQfH7we1xIHFK67e');
final enc.Encrypter encrypterIv = enc.Encrypter(enc.AES(ivKey,mode: enc.AESMode.cbc));
final String decrypted =encrypterIv.decrypt64(hexIv, iv: ivHexIv);
setState(() {
text=decrypted;
});
} catch (e){
debugPrint(e.toString());
}
}
In this code I’m geting “Input data length must be a multiple of cipher’s block size” error