2009-06-16 2 views
-1

Я использую JAVA Мой друг использует SYMBIANКак расшифровать данные, используя RSA PrivateKey

Я и мой друг имеет такой же модуль RSA. Если я зашифрую данные с помощью открытого ключа, мой друг сможет расшифровать их. Но если мой друг шифрует данные открытым ключом, то я не могу расшифровать данные. Я получил сообщение об ошибке, как «данные должны начать с нуля»

public static byte[] encrypt(byte[] encrptdByte) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { 
    byte[] encryptionByte = null; 
    Cipher cipher = Cipher.getInstance("RSA"); 
    cipher.init(Cipher.ENCRYPT_MODE, publicKey); 
    encryptionByte = cipher.doFinal(encrptdByte); 
    return encryptionByte; 
} 

public static void decrypt(byte[] encrptdByte) throws NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException { 
    byte[] encryptionByte = null; 
    Cipher cipher = Cipher.getInstance("RSA"); 
    cipher.init(Cipher.DECRYPT_MODE, publicKey); 
    encryptionByte = cipher.doFinal(encrptdByte); 

    System.out.println("Recovered String  ::: " + new String(encryptionByte)); 
} 

Благодарности Сунил

+0

Можете ли вы опубликовать часть кода Java, который вы используете, или какие библиотеки? – Thilo

+0

Я использую RSA без прошивки без шифрованного режима. – Sunil

+0

Я разместил, пожалуйста, взгляните на него. – Sunil

ответ

6

decrypt функция использует publicKey - откуда оно взялось? Обратите внимание, что данные, зашифрованные открытым ключом, должны быть дешифрованы с помощью соответствующего закрытого ключа, а не с тем же открытым ключом. Асимметричное шифрование, такое как RSA, имеет понятие о парах ключей, в которых каждый ключ в паре может расшифровать данные, зашифрованные другим ключом, в отличие от симметричного шифрования, такого как AES, где один и тот же ключ работает как для шифрования, так и для дешифрования.

+0

Да, Symbian создали открытый ключ, используя модуль, который я им отправил. Тем не менее эта проблема возникла. Спасибо – Sunil

+0

RSA ключи не только модуль N, но также есть показатель E для шифрования и показатель D для дешифрования. Таким образом, открытый ключ по существу (E, N) и закрытый ключ (D, N). – laalto

+0

Нет, мы можем создать открытый ключ RSA с использованием модуля. – Sunil

2

Чтобы добавить предыдущее сообщение, нецелесообразно шифровать/расшифровывать данные в больших масштабах с помощью ассиметричного шифрования (поскольку оно значительно медленнее симметричного шифрования). Наиболее практичным использованием асимметричного шифрования (например, RSA) является шифрование симметричных ключей (для AES или аналогичного алгоритма), которые использовались для шифрования данных, а также для подписи безопасного хэша в дайджесте сообщений (SHA-256 и т. Д.).

Зашифрованное сообщение обычно запечатывается в «конверте», который содержит зашифрованное сообщение, а также ключи, используемые для шифрования. Ключи, конечно же, зашифровываются с открытым ключом получателей, тем самым гарантируя, что только владелец может получить ключи.

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

+0

Максимальные данные, которые могут быть зашифрованы с помощью RSA = 117 байт, но мои данные имеют только 14 байтов. – Sunil

+0

Sunil, Я не очень хорошо знаком с API Java Crypto, но для расшифровки требуется доступ к закрытому ключу. Я предполагаю, что cipher.Init() имеет некоторый способ доступа к закрытому ключу на основе publicKey, который прошел? Так как ваш друг смог расшифровать данные, зашифрованные с помощью вашего открытого ключа, вы передали ему закрытый ключ? – 2009-06-17 09:56:51

Смежные вопросы