Дополнение ошибки при использовании шифрования RSA в C# и Дешифрования в Java

Очевидный ответ, конечно, не должен делать броска непроверенного.

, Если это абсолютно необходимо, затем по крайней мере, пытаются ограничить объем @SuppressWarnings аннотация. Согласно Javadocs, это может пойти на локальные переменные; этим путем это даже не влияет на весь метод.

Пример:

@SuppressWarnings("unchecked")
Map myMap = (Map) deserializeMap();

нет никакого способа определить, должен ли Map действительно иметь универсальные параметры . Необходимо знать заранее, чем параметры должны быть (или Вы узнаете, когда Вы доберетесь ClassCastException). Поэтому код генерирует предупреждение, потому что компилятор не может возможно знать, безопасно ли.

6
задан Matt Shaver 19 August 2009 в 23:43
поделиться

4 ответа

Убедитесь, что вы правильно обменялись ключом.

Попытка расшифровать неверным ключом неотличима от дешифрования данных с плохо заполненными дополнениями.

2
ответ дан 16 December 2019 в 21:44
поделиться

Я предполагаю, что версия C # передает байты в формате с прямым порядком байтов, а версия Java импортирует байты, ожидая, что они будут в формате с прямым порядком байтов. Попробуйте поменять местами байты в baRet из конца в конец, прежде чем преобразовывать их в базу 64, и посмотрите, сможет ли ваша программа на Java расшифровать их тогда.

Просто предположение.

0
ответ дан 16 December 2019 в 21:44
поделиться

Я работаю над аналогичной проблемой, возникающей между .Net и iPhone в Objective-C, и я думаю, что ответ кроется в этой маленькой жемчужине из документации RSACryptoServiceProvider:

В отличие от реализации RSA в неуправляемом CAPI, класс RSACryptoServiceProvider меняет порядок зашифрованного массива байтов после шифрования и до дешифрования. По умолчанию данные, зашифрованные классом RSACryptoServiceProvider, не могут быть дешифрованы функцией CAPI CryptDecrypt, а данные, зашифрованные методом CAPI CryptEncrypt, не могут быть расшифрованы классом RSACryptoServiceProvider.

Подробнее см. Здесь: http://msdn.microsoft.com/en-us/library/s575f7e2 (v = VS.90) .aspx

2
ответ дан 16 December 2019 в 21:44
поделиться

У меня была точно такая же проблема, и я наконец нашел решение!

Я упрямо пытался использовать PKCS1Padding, но мне не удалось заставить его работать.

Лучший результат, который я получил, используя "rsa.Encrypt(baIn, false)" на стороне C# и "RSA/NONE/NoPadding" на стороне Java, был такой: "☻?o+_>??5?l0Q*??*?R▲??♀7...", за которым следовала моя расшифрованная строка. Таким образом, она расшифровывается, но так как не указана прокладка, данные сдвигаются. Я перепробовал все доступные в bouncycastle варианты вставки, но все время получал ошибки типа "неверный размер блока" или "неверный хэш данных".

Поэтому я решил начать пробовать OAEP paddings и мне наконец удалось заставить его работать, используя "rsa.Encrypt(baIn, true)" на стороне C# и "RSA/NONE/OAEPWithSHA1AndMGF1Padding" на стороне java!

Это сработало для меня, я надеюсь, что это сработает и для вас! Если это не сработает, убедитесь, что вы используете правильный ключ, очень часто проблема возникает из-за ключа.

4
ответ дан 16 December 2019 в 21:44
поделиться