AS3Crypto RSA Подписание

У меня возникают некоторые проблемы с сопоставлением значения, возвращенного RSA, подписавшего хэш Base64 SHA1 в библиотеке action3 as3crypto с результатом, возвращаемым в C#.

Я передаю хеш Base64, декодированный как байтовый массив, функции sign(), предоставленной в as3crypto и base64, кодирующей результат. Однако этот результат никогда не совпадает с возвращенным результатом функции aC#, которая выполняет ту же задачу. Имеет ли значение, что функция принимает и возвращает hex, даже если она работает на уровне байтового массива?

Пожалуйста, посмотрите мою функцию подписи ниже, чтобы проверить, что я ничего не пропустил!

private function signHash(hashInBase64:String):String
{
       var src:ByteArray = Base64.decodeToByteArray(hashInBase64);
       var key:RSAKey = getRSAKey();
       var dst:ByteArray = new ByteArray();

       key.sign(src, dst, src.length);

       return Base64.encodeByteArray(dst);
}

Кто-нибудь имел большой опыт работы с библиотекой AS3Crypto?

Любая помощь будет отличной!!!

Спасибо,

Джон

2 ответа

Я предполагаю, что ваша версия C# использует RSA PKCS #1 версии 1.5. Стандарт вычисляет подписи, выполняя операцию закрытого ключа RSA над байтовой строкой, составленной как

0x00 0x01 || 0xff* || 0x00 || OID || hash

Просмотр кода as3crypto показывает, что класс RSAKey не добавляет OID во время операции подписи. Следовательно, если вы этого не сделаете, вы получите неправильные результаты.

Просмотр кода также показывает, что as3crypto уязвим для этой атаки, потому что он не проверяет заполнение должным образом. Этой атаке более 3 лет. Следовательно, кажется полезным использовать библиотеку, отличную от as3crypto.

Теперь существует крипто библиотека ActionScript, совместимая с.NET. Вот оно: http://code.google.com/p/flame. Похоже, он поддерживает RSA точно так же, как и.NET.

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