Первый постер здесь. Потрясающее сообщество здесь. После бесконечных часов поиска я не могу найти ответ на эту проблему, с которой сталкиваюсь.
Прежде всего, я не гуру, когда дело доходит до шифрования / дешифрования, криптологии и т. Д. Я только хочу зайти так далеко в этом мире, чтобы не потеряться. Основной фреймворк, на котором я пишу код, - это .NET, и меня попросили создать реализацию AES CBC для C #, которая может работать на JavaScript и ActionScript 3. Я успешно работал с обоими, но с JavaScript у меня возникла проблема.
Я решил использовать реализацию SlowAES AES, потому что она кажется наиболее популярной среди лучших взаимодействий.
Пожалуйста, смотрите следующие ссылки относительно моей проблемы ...
Выпуск № 9: http://code.google.com/p/slowaes/issues/detail?id=9
По сути, моя проблема со SlowAES заключается в том, что я не могу правильно расшифровать что-либо, не зная длины исходного незашифрованного текста. Это побеждает цель верно? Я должен быть в состоянии расшифровать зашифрованную строку без необходимости знать исходную строку.
Если я что-то упустил, я был бы благодарен, если бы указали в правильном направлении. К счастью, я в порядке, потому что реализация .NET AES, которую я собрал, может расшифровать то, что шифрует SlowAES, так же, как и реализация ActionScript 3.
На данный момент я бы хотел, чтобы SlowAES правильно расшифровывал.
Обновлено
После использования Remus я определил, что SlowAES использует схему заполнения PKCS5 / 7, но не удаляет ее должным образом. Теперь моя проблема, похоже, связана с C #, пониманием байтовых массивов и т. Д.
Я вижу последний символ в моем расшифрованном тексте «5», которому предшествует «0». Эта картина продолжается 5 раз. Теперь из того, что Ремус сказал ниже, я должен вычесть длину расшифрованной строки на это число. Но шаблон «05», означает ли это, что я удваиваю 5, получая 10, а затем вычитаю 10 из моей расшифрованной длины строки?
Кроме того, какой самый простой способ получить число, которое мне нужно вычесть? Я использую следующее, чтобы получить номер в настоящее время:
Byte[] decryptedBytes = System.Text.Encoding.ASCII.GetBytes(decrypted);<br>
Byte padLengthByte = decryptedBytes[decryptedBytes.Length - 1];<br>
Char padLengthChar = Convert.ToChar(padLengthByte);<br>
String padLengthString = padLengthChar.ToString();<br>
Int32 padLength = Int32.Parse(padLengthString);
Я уверен, что я делаю это неправильно. Опять же, любая помощь всегда ценится.
Еще один вопрос, который у меня возникает, как вы узнаете, применялся ли в первую очередь отступ для его удаления? Если «\ 07» представляет 7 байтов заполнения, что, если последний байт был «\ 01 \»?