I have a Rijndael based c# code. I try to encrypt in c# Rijndael and decrpt in javascript(CryptoJS). But i cant match the encrypted values. I try lots of things but nothing worked.
Here is my c# code:
public string GenerateKey () {
string EncodeAes (string key, string input) {
var aes = GetCryptoParams (key);
var plainBytes = Encoding.UTF8.GetBytes (input);
//Key will be Base64 String -- oo
return Convert.ToBase64String (AesEncrypt (plainBytes, aes));
}
RijndaelManaged GetCryptoParams (string key) {
// random key bytes 16bit
var keyBytes = new byte[16];
var secretKeyBytes = Encoding.UTF8.GetBytes (key);
Array.Copy (secretKeyBytes, keyBytes, Math.Min (keyBytes.Length, secretKeyBytes.Length));
var aes = new RijndaelManaged {
Mode = CipherMode.CBC,
Padding = PaddingMode.PKCS7,
KeySize = 128,
BlockSize = 128,
Key = keyBytes,
IV = keyBytes
};
return aes;
}
byte[] AesEncrypt (byte[] plainBytes, RijndaelManaged rijndaelManaged) {
return rijndaelManaged.CreateEncryptor ()
.TransformFinalBlock (plainBytes, 0, plainBytes.Length);
}
return EncodeAes ("qwertasdfgzxcvbn", RandomPassword.Generate (16));
}
// POST api/values
[HttpPost]
public HttpResponseMessage GetEncDecText ([FromBody] encRequest req) {
string EncodeAes (string key, string input) {
var aes = GetCryptoParams (key);
var plainBytes = Encoding.UTF8.GetBytes (input);
return Convert.ToBase64String (AesEncrypt (plainBytes, aes));
}
string DecodeAes (string key, string thisDecode) {
var aes = GetCryptoParams (key);
try {
var encryptedBytes = Convert.FromBase64String (thisDecode);
return Encoding.UTF8.GetString (AesDecrypt (encryptedBytes, aes));
} catch {
return null;
}
}
RijndaelManaged GetCryptoParams (string key) {
var keyBytes = new byte[16];
var secretKeyBytes = Encoding.UTF8.GetBytes (key);
Array.Copy (secretKeyBytes, keyBytes, Math.Min (keyBytes.Length, secretKeyBytes.Length));
var aes = new RijndaelManaged {
Mode = CipherMode.CBC,
Padding = PaddingMode.PKCS7,
KeySize = 128,
BlockSize = 128,
Key = keyBytes,
IV = keyBytes
};
return aes;
}
byte[] AesEncrypt (byte[] plainBytes, RijndaelManaged rijndaelManaged) {
return rijndaelManaged.CreateEncryptor ()
.TransformFinalBlock (plainBytes, 0, plainBytes.Length);
}
byte[] AesDecrypt (byte[] encryptedData, RijndaelManaged rijndaelManaged) {
return rijndaelManaged.CreateDecryptor ()
.TransformFinalBlock (encryptedData, 0, encryptedData.Length);
}
}
And here is my javascript code:
var serverEncText = "P+KvsN/m3qOc8egIkqyi4w==";
var secretKey = "7YIOB9NooY225lP6CRSqKQ0KiluAF/6cYn3kFXvJkS0=";
var decryptData2 = function(encryptedData) {
var Key = CryptoJS.enc.Base64.parse(secretKey);
var IV = CryptoJS.enc.Utf8.parse(new Buffer.from("0123456789ABCDEF"));
var decryptedText = CryptoJS.AES.decrypt(encryptedData, Key, {
keySize: 128 / 8,
BlockSize: 128,
iv: IV,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return decryptedText.toString(CryptoJS.enc.Utf8)
}
var result = decryptData2(encryptedData);
console.log(result, "result");
backend works awesome: "secretKey" is my generated c# key and "serverEncText" is my c# encoded text. When when i try this in javascript it's always returns empty string.
How to resolve it ?