Я разрабатываю приложение на NodeJS , которое использует C # API .И я хочу реализовать защищенные вызовы с AES .Я использую AesJS в NodeJS и System.Security.Cryptography в C # .
Часть C # используется в других частях приложения и работает правильно, поэтому я предполагаю, что моя ошибка в части NodeJS .
Ошибка:
Недопустимая длина для массива или строки Base-64.
Мой код:
NodeJS
encryptData = function(data) {
var key = pbkdf2.pbkdf2Sync(config.aes.pass, config.aes.salt, 1, 128 / 8, null);
var dataBytes = aesjs.utils.utf8.toBytes(data);
var ivBytes = aesjs.utils.utf8.toBytes(config.aes.iv);
var aesOfb = new aesjs.ModeOfOperation.ofb(key, ivBytes);
var encryptedBytes = aesOfb.encrypt(dataBytes);
var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes);
return encryptedHex;
}
C #
public static string DecodeAndDecrypt(string encrypted)
{
using (var csp = Aes.Create())
{
var d = GetCryptoTransform(csp, false);
byte[] output = Convert.FromBase64String(encrypted);
byte[] decryptedOutput = d.TransformFinalBlock(output, 0, output.Length);
string decypted = Encoding.UTF8.GetString(decryptedOutput);
return decypted;
}
}
Ошибка в этой строке:
byte [] output = Convert.FromBase64String (зашифрованный);
ОБНОВЛЕНИЕ
Чтобы проверить, что прокомментировано, я добавил parse к base64 в NodeJS :
return Buffer.from(encryptedHex).toString('base64');
Теперь я 'На шаг впереди:
byte [] decryptedOutput = d.TransformFinalBlock (output, 0, output.Length);
И возвращает ошибку:
Входные данные не являются полным блоком.