The data which i try to decrypt in C# is encrypted using AES-256 alorithm in Nodejs and the code is below.
const crypto = require('crypto');
const validator = require('validator');
const algorithm = 'aes256';
const inputEncoding = 'utf8';
const outputEncoding = 'hex';
const iv = crypto.randomBytes(16)
function encrypt(key,text) {
key = processKey(key);
let cipher = crypto.createCipheriv(algorithm, key, iv);
let ciphered = cipher.update(text, inputEncoding, outputEncoding);
ciphered += cipher.final(outputEncoding);
return ciphered;
}
Now i'm provided with a encrypted data of length 32 like "1234567304e07a5d2e93fbeefd0e417e" and key of length 32 like "123456673959499f9d37623168b2c977".
I'm trying to decrypt the same using the below c# code and getting a error as 'Length of the data to decrypt is invalid". kindly advice.
public static string Decrypt(string combinedString, string keyString)
{
string plainText;
byte[] combinedData = StringToByteArray(combinedString);
Aes aes = Aes.Create();
aes.Key = Encoding.UTF8.GetBytes(keyString);
byte[] iv = new byte[aes.BlockSize / 8];
byte[] cipherText = new byte[combinedData.Length - iv.Length];
Array.Copy(combinedData, iv, iv.Length);
Array.Copy(combinedData, iv.Length, cipherText, 0, cipherText.Length);
aes.IV = iv;
aes.Mode = CipherMode.CBC;
ICryptoTransform decipher = aes.CreateDecryptor(aes.Key, aes.IV);
using (MemoryStream ms = new MemoryStream(cipherText))
{
using (CryptoStream cs = new CryptoStream(ms, decipher, CryptoStreamMode.Read))
{
using (StreamReader sr = new StreamReader(cs))
{
plainText = sr.ReadToEnd();
}
}
return plainText;
}
}
public static byte[] StringToByteArray(string hex) {
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
Below is the Decryption code in Node.js which works fine
const crypto = require('../functions/crypto');
const assert = require('assert');
const { v4: uuidv4 } = require('uuid');
describe('crypto module', function() {
it('should work', function(done) {
const toHash = 'Octomate';
const hashKey = uuidv4();
const hash = crypto.encrypt(hashKey, toHash);
const decrypted = crypto.decrypt(hashKey, hash);
assert.strictEqual(toHash, decrypted);
done();
});
});
from AES 256 Nodejs Encryption and Decrypting it in C#.Net
No comments:
Post a Comment