Не удалось расшифровать RSA с помощью Java

1

Мой пароль зашифрован с помощью RSA в приложении для Android. На стороне сервера мне нужно расшифровать его. У меня есть файл.pem и php-код для дешифрования:

 function privatekey_decodeing($crypttext, $fileName, $fromjs = FALSE)
    {
        $key_content = file_get_contents( $fileName );
        $prikeyid = openssl_get_privatekey( $key_content, "1234" );
        $crypttext = str_replace(' ', '+', $crypttext);
        $crypttext = base64_decode( $crypttext );
        $padding = $fromjs ? OPENSSL_NO_PADDING : OPENSSL_PKCS1_PADDING;
        if( openssl_private_decrypt( $crypttext, $sourcestr, $prikeyid, $padding ) )
        {
            return $fromjs ? rtrim( strrev( $sourcestr ), "/0" ) : "" . $sourcestr;
        }
        return;
    }

fileName - файл frivatekey (файл.pem). Теперь мне нужно использовать java для его расшифровки. Я пробовал некоторые методы, все провалились. Вот что я пробовал:

  1. используя файл.pem для генерации файла ключа.der
  2. чтение файла.der для получения privateKey
  3. с помощью байта [] читать из.der файла для генерации ключевого файла

    public static PrivateKey generatePrivateKey(byte[] key)
        throws NoSuchAlgorithmException, InvalidKeySpecException {
        KeySpec keySpec = new PKCS8EncodedKeySpec(key);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        return keyFactory.generatePrivate(keySpec);
    }
    
  4. расшифровать мой пароль

    public static byte[] decrypt(PrivateKey privateKey, byte[] data)
        throws Exception {
        Cipher ci = Cipher.getInstance(ALGORITHOM, DEFAULT_PROVIDER);
        ci.init(Cipher.DECRYPT_MODE, privateKey);
        return ci.doFinal(data);
    }
    

Но это не работает, и я не знаю, где идет не так. В php-коде я вижу $prikeyid = openssl_get_privatekey( $key_content, "1234" ); Но я не знаю, что означает "1234". Означает ли это использование "1234" для шифрования ключевого файла? Это причина, по которой дешифрование не удалось?

  • 0
    Да, 1234 является парольной фразой, которая использовалась для шифрования самого ключа.
  • 0
    Спасибо за ваш ответ и изменение моего вопроса (я прошу прощения за мой плохой английский и не проверяю вопрос), и знаете ли вы, как я могу использовать "1234" для расшифровки файла ключей в Java?
Теги:
encryption
rsa

1 ответ

1
Лучший ответ

$padding = $fromjs? OPENSSL_NO_PADDING: OPENSSL_PKCS1_PADDING;

Это и плохие варианты:

Пожалуйста, не применяйте RSA самостоятельно. Вы сделаете свое приложение невероятно неуверенным.

Рекомендуемое чтение:

  • 0
    Спасибо за такой профессиональный ответ, переваривать их не так просто для меня, но я постараюсь получить его.
  • 0
    Простой режим: libsodium-jni для клиента + libsodium-php на сервере.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню