Увы,
Режим CTR не реализован как «режим» во встроенном классе AES в пространстве имен System.Security.Cryptography.
Но, есть решение.
Режим CTR не так уж сложно реализовать, используя встроенный класс AES, работающий в режиме ECB, IV всех нулей, без заполнения и несколько настроек. По существу, для каждого блока режим CTR шифрует счетчик, а затем XOR результат этого шифрования с открытым текстом, чтобы получить зашифрованный текст. Это для шифрования. Вы бы сделали обратное для расшифровки. Поскольку операция преобразования является XOR, она рефлексивна, поэтому дешифрование в действительности совпадает с шифрованием.
Начните с нуля для первого 16-байтового блока (размер блока для AES); увеличить счетчик для каждого последующего блока.
Честно говоря, самая сложная часть всей этой истории - это сегментирование данных, которые должны быть зашифрованы, на блоки по 16 байт. Если приложение просит зашифровать 10 байтов, вы не можете зашифровать. Вам нужно подождать, пока вы не получите полные 16 байтов, прежде чем выполнять преобразование. Так что вам нужно управлять буфером.
У меня нет демонстрации рабочего кода для вас, но, учитывая это описание, не составит труда создать подходящий для вас режим CTR. Вы можете увидеть пример шифрования в режиме CTR на основе встроенного класса AES в модуле WinZipAes.cs , являющемся частью библиотеки DotNetZip с открытым исходным кодом. Этот код работает , но не готов к использованию вне DotNetZip. Вам нужно будет упаковать его, чтобы сделать его чистым.
С другой стороны, если вы просто хотите, чтобы Javascript и C # взаимодействовали с AES, и вы не особенно привязаны к режиму CTR, то вы могли бы очень легко использовать режим ECB. Этот вопрос показывает, как заставить SlowAES и класс Aes .NET работать вместе, и включает ссылки на рабочий код (Javascript, C # и VB). Но будьте осторожны с режимом ECB .
Это библиотека Javascript, отличная от выбранной вами; Я предпочитаю slowAES, потому что это имело для меня больше смысла. также в этом ответе я предоставляю вспомогательные классы, такие как получение ключа на основе пароля RFC2898.
Удачи.