Очевидный ответ, конечно, не должен делать броска непроверенного.
, Если это абсолютно необходимо, затем по крайней мере, пытаются ограничить объем @SuppressWarnings
аннотация. Согласно Javadocs, это может пойти на локальные переменные; этим путем это даже не влияет на весь метод.
Пример:
@SuppressWarnings("unchecked")
Map myMap = (Map) deserializeMap();
нет никакого способа определить, должен ли Map
действительно иметь универсальные параметры
. Необходимо знать заранее, чем параметры должны быть (или Вы узнаете, когда Вы доберетесь ClassCastException
). Поэтому код генерирует предупреждение, потому что компилятор не может возможно знать, безопасно ли.
Убедитесь, что вы правильно обменялись ключом.
Попытка расшифровать неверным ключом неотличима от дешифрования данных с плохо заполненными дополнениями.
Я предполагаю, что версия C # передает байты в формате с прямым порядком байтов, а версия Java импортирует байты, ожидая, что они будут в формате с прямым порядком байтов. Попробуйте поменять местами байты в baRet из конца в конец, прежде чем преобразовывать их в базу 64, и посмотрите, сможет ли ваша программа на Java расшифровать их тогда.
Просто предположение.
Я работаю над аналогичной проблемой, возникающей между .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
У меня была точно такая же проблема, и я наконец нашел решение!
Я упрямо пытался использовать 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!
Это сработало для меня, я надеюсь, что это сработает и для вас! Если это не сработает, убедитесь, что вы используете правильный ключ, очень часто проблема возникает из-за ключа.