Открытый ключ RSA состоит из двух компонентов, а не только одного, как я думал.
Существует Exponent
и Modulus
.Они оба числа, но я передаю их Blackberry из клиента .NET в виде строк Base64 и декодирую их в байтовые массивы, когда они используются функцией шифрования RIM, поскольку они принимают байтовые массивы в качестве параметров.
byte[] exponent = Base64InputStream.decode("exponent base64 string");
byte[] modulus = Base64InputStream.decode("modulus base64 string");
NoCopyByteArrayOutputStream cipherUserData = new NoCopyByteArrayOutputStream();
RSACryptoSystem cryptoSystem = new RSACryptoSystem(1024);
// Create Public key using your variables from before
RSAPublicKey publicKey = new RSAPublicKey( cryptoSystem, exponent, modulus);
// Encryption engine objects
RSAEncryptorEngine eEngine = new RSAEncryptorEngine(publicKey);
PKCS1FormatterEngine fEngine = new PKCS1FormatterEngine(eEngine);
BlockEncryptor cryptoStream = new BlockEncryptor(fEngine, cipherUserData);
// Read the user data and encrypt while doing so. Remember, cryptoStream writes its data to
// cipherUserData so this is where the encrypted version of userData will end up.
cryptoStream.write( userData, 0, userData.length );
cryptoStream.close();
cipherUserData.close();
String encryptedUserData = new String(cipherUserData.toByteArray());
ЭтоВ общем, все, что есть, ребята, это просто, но мне потребовалось много времени, чтобы получить это из документации API:)
Важное замечание RSA ограничен в целях шифрования, так как выможет только зашифровать сообщение, которое <= размер ключа.Это 117 байтов для 1024-битного RSA и 245 байтов для 2048-битного RSA.Для шифрования больших сообщений принятым способом является шифрование сообщения с использованием AES или аналогичного, а затем шифрование ключа AES с помощью открытого ключа RSA.Вы отправите зашифрованный текст AES, а также зашифрованный текст RSA, содержащий ключ для дешифрования зашифрованного текста AES. </p>
То, что я написал выше, заняло несколько дней работы и чтения.Надеюсь, это поможет кому-то быстрее достичь своей цели.:)