Как я могу портировать Javascript AES библиотеку в.NET, чтобы обеспечить совместимость?

Фон:

У меня есть данные, которые я шифрую с помощью JavaScript на стороне клиента, которые необходимо расшифровать на стороне сервера.

Насколько я могу судить, библиотека AES javascript, которую я использую, не взаимодействует с библиотекой C# Rijndael.

Таким образом, мне осталось по существу реализовать JavaScript AES в C# для использования.

Я собираюсь попытаться скомпилировать javascript с использованием jsc.exe в dll и посмотреть, сможет ли рефлектор сэкономить мне время.

Я знаю, что jscript - это не то же самое, что javascript, но я надеюсь, что смогу сойти с рук с чем-то, что прекрасно работает, и просто сделаю прикосновения вручную.

Проблема:

Когда я компилирую JavaScript, используя JSC, я получаю следующую ошибку:

ошибка JS1234: внутри библиотеки разрешены только определения типов и пакетов

Оскорбительная строка - это первая строка в следующих строках кода:

var GibberishAES = (function(){
    var Nr = 14,
    /* Default to 256 Bit Encryption */
    Nk = 8,
    Decrypt = false,

    enc_utf8 = function(s)
    {
        try {
            return unescape(encodeURIComponent(s));
        }
        catch(e) {
            throw 'Error on UTF-8 encode';
        }
    },

    dec_utf8 = function(s)
    {
        try {
            return decodeURIComponent(escape(s));
        }
        catch(e) {
            throw ('Bad Key');
        }
    },

И полный источник можно найти здесь:

Я не уверен, в чем проблема. Я также открыт для предложений о том, как зашифровать / расшифровать данные между Javascript и C#.

2 ответа

Решение

Если вы просто хотите сделать AES из Javascript, вы пробовали использовать slowAES? Это сработало для меня., Я обнаружил хорошее взаимодействие между slowAES и встроенными классами Rijndael или AES в.NET. Также я обнаружил, что дизайн класса был естественным и простым в использовании и понимании. Это не потребует переноса из Javascript в JScript.

SlowAES на самом деле не выводит пароли на основе паролей. Если вам это нужно (вероятно), то я предлагаю реализацию PBKDF2 от Parvez Anandam. Я также использовал это, и это прекрасно работает.

Когда я тестировал slowAES в сочетании с PBKDF2 от Anandam, он хорошо взаимодействовал с классом C# RijndaelManaged в режиме CBC.

Не стоит откладывать на имя "slowAES" - это не очень медленно. Он называется "медленный", потому что это Javascript.

Если вы не можете использовать что-то чистое и совместимое, например slowAES, то перед тем, как попробовать компилятор jsc, я бы предложил упаковать существующий код javascript в компонент сценариев Windows. WSC позволяет упаковывать логику сценария как компонент COM, где он становится доступным для любой среды с поддержкой COM, включая любое приложение.NET. Вот пост, который показывает, как упаковать slowAES как WSC.

По некоторым причинам, не многие знают, что вы можете упаковать код скрипта как компонент COM, но он существует уже 10 лет. Это может показаться необычным для вас, но это лучше, чем делать порт. Код внутри WSC - это Javascript, а не Javascript.NET.

У меня была эта проблема и сегодня. Я случайно наткнулся на решение. использование package theNameSpace { class Whatever { function func() { return "the results"; } } }

Другие вопросы по тегам