I'm trying to encrypt jpeg on server and decrypt it on browser like below but failed at step #3.
- Encrypt jpeg by C# on server
- Get encrypted data, vector, and passphrase on client browser
- Decrypt on client browser
I tried to things below, but nothing helped.
- use RijndaelManaged instead of AesManaged on server.
- use 'CryptoJS.enc.Utf16.parse' instead of 'CryptoJS.enc.Utf8.parse' on client.
Encryption on Server
public byte[] Encrypt(byte[] bytes, string password, string vector)
{
AesManaged aes = new AesManaged();
aes.KeySize = _keySize;
aes.BlockSize = _blockSize;
aes.Mode = CipherMode.CBC;
aes.IV = Encoding.UTF8.GetBytes(vector);
aes.Key = Encoding.UTF8.GetBytes(password);
aes.Padding = PaddingMode.PKCS7;
byte[] encrypted = aes.CreateEncryptor().TransformFinalBlock(bytes, 0, bytes.Length);
return encrypted;
}
Decryption on Client
// These values are same as above
var encrypted = ... // byte[]
var vector = ... // string
var password = ... // string
var cipherParams = CryptoJS.lib.CipherParams.create({
iv: CryptoJS.enc.Utf8.parse(vector),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
var cipherText = CryptoJS.lib.WordArray.create(encrypted);
var passwordWordArray = CryptoJS.enc.Utf8.parse(password);
var decrypted = CryptoJS.AES.decrypt(cipherText, passwordWordArray, cipherParams);
// decrypted.words is empty here
Please advise.
I'm using .Net Core MVC 2.1, Crypto-JS 3.1.9-1, and Chrome74.0.3729.169 on Windows 10.
THIS PROBLEM RESOLVED
As Topaco mentioned, there was a flaw in javascript. The corrected code is as below.
var encrypted = ... // byte[]
var vector = ... // string
var password = ... // string
var cipherParams = CryptoJS.lib.CipherParams.create({
iv: CryptoJS.enc.Utf8.parse(vector),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
var cipherText = CryptoJS.lib.WordArray.create(encrypted);
var cipherTextParam = CryptoJS.lib.CipherParams.create({
ciphertext: cipherText
});
var passwordWordArray = CryptoJS.enc.Utf8.parse(password);
var decrypted = CryptoJS.AES.decrypt(cipherTextParam, passwordWordArray, cipherParams);
Thank you for your help.