Crypt_RSA en PEAR no utiliza la codificación PKCS # 1. Sospecho que es por eso que .NET te está dando un mensaje de error.
Como un ejemplo de que se rompa, he creado un script php usando Crypt_RSA para cifrar la cadena "1234567" (voy a omitir que muestra la carga de claves):
print $rsa_obj->encryptBinary("1234567", $key_pair->getPublicKey());
Tomando la salida de ese y de la tubería se a través de la herramienta de línea de comando openssl da el siguiente error:
$ ./crypt | openssl rsautl -inkey privkey.pem -decrypt
RSA operation error
18437:error:04065084:rsa routines:RSA_EAY_PRIVATE_DECRYPT:data too large for modulus:fips_rsa_eay.c:558:
openssl espera PKCS # 1 de relleno por defecto, pero añadiendo el -raw (sin relleno) de la bandera de OpenSSL no ayuda tampoco.
Usando la extensión openssl en php da el relleno adecuado (por defecto es PKCS # 1, otros disponibles):
$pem = file_get_contents("pubkey.pem");
$key = openssl_pkey_get_public($pem);
$encrypted = "";
if(openssl_public_encrypt("1234567", $encrypted, $key)) {
print $encrypted;
} else {
print "failed\n";
}
Y el código de descifrado en php:
$pem = file_get_contents("privkey.pem");
$key = openssl_pkey_get_private($pem);
$enc_data = file_get_contents("openssl.crypted");
$decrypted = "";
if(openssl_private_decrypt($enc_data, $decrypted, $key)) {
print "$decrypted\n";
} else {
print "failed\n";
}
Certificados en el contexto de RSA son certificados X.509, que son las claves RSA más los datos sobre esas claves. Los certificados X.509 se usan en SSL, pero no se requiere el uso de RSA.
¿Podría haber un problema con la clave en sí? Caracteres impares, ¿problema entre UNICODE y UTF-8? –
Es posible que esté utilizando diferentes almohadillas. – SLaks
RE: Relleno: ¿se refiere a la cadena en sí? En este caso, es exactamente 32 bytes, que es divisible por 8 ... ¿así que lo tengo cubierto? – user312904