Совместимость между AesJS и C # System.Security.Cryptography - PullRequest
0 голосов
/ 08 марта 2019

Я разрабатываю приложение на 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);

И возвращает ошибку:

Входные данные не являются полным блоком.

...