Pregunta

Bueno, he estado pasando por mi infierno personal en estos días

Estoy teniendo algunos problemas para descifrar un mensaje que se cifra usando RSA y estoy siempre en su defecto con un "RSA / OAEP-MGF1 (SHA-1): inválido texto cifrado "

  1. Tengo una clave privada codificada en base 64 y lo cargo:

        RSA::PrivateKey private_key;
        StringSource file_pk(PK,true,new Base64Decoder);
        private_key.Load( file_pk );
    
  2. A continuación, procedo a decodificar el mensaje haciendo:

    RSAES_OAEP_SHA_Decryptor decryptor(private_key);
    
    AutoSeededRandomPool rng;
    
    string result;
    StringSource(ciphertext, true,
        new PK_DecryptorFilter(rng, decryptor,
            new StringSink(result)
        )
    );
    

Por lo que yo puedo decir, el mensaje debe ser analizada sin ningún problemas. texto cifrado es un std :: string, por lo que no \ 0 en el extremo que pudiera hacer algo inesperado.

acabo aunque de algo, y lo que si la clave privada es incorrecta pero de todos modos se puede cargar sin lanzar un error de decodificación BER. Qué habría que tirar cuando el descifrado?

La esperanza de que alguien puede arrojar algo de luz sobre esto.

Saludos

¿Fue útil?

Solución

Si la clave fue dañado en realidad, la función de carga debería haber fallado. Sin embargo, usted puede pedir la clave para la auto-prueba en sí, que debe detectar cualquier corrupción, llamando Validate, como:

bool key_ok = private_key.Validate(rng, 3);

El segundo parámetro (en este caso, 3) especifica la cantidad de cheques que hacer. Para RSA, esto hará que se ejecute todas las pruebas disponibles, incluso los / las lentas y caras.

Otra de las razones de la decodificación puede fallar si la clave es simplemente no es el que se utiliza para cifrar el mensaje original.

Obviamente, la entrada de texto cifrado debe ser completamente idéntica a la que fue producida originalmente en el lado de encriptación. Para la depuración, una buena manera de comprobar esto sería para alimentar el texto cifrado en ambos lados en una función hash (convenientemente ya disponibles para usted, por supuesto) y la comparación de las salidas. Si HEX o base64 el texto cifrado para la transmisión debe deshacer de que antes de dárselo al descifrador RSA.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top