Published on InterSystems Developer Community (https://community.intersystems.com)

Inicio > openssl_public_encrypt para Ensemble

Pregunta
Laura Blázquez ... · 19 feb, 2020

openssl_public_encrypt para Ensemble

Hola.

Necesitamos llamar a un servicio y tenemos que encriptar la petición utilizando una clave pública. Tenemos un ejemplo de cómo realizar la llamada en PHP. También tenemos la clave pública y todos los parámetros que necesitamos. El ejemplo en PHP es éste y funciona (utiliza openssl):

$url = "https://XXXXX/";
$json = '{"api_key":"XXXXX", "id":"1"}';
$jsonEncrypt, = '';
$publicKey = file_get_contents("public.key");
openssl_get_publickey($publicKey);
openssl_public_encrypt($json,  $jsonEncrypt,  $publicKey);
$jsonEncrypt = base64_encode($jsonEncrypt);

Necesitamos hacer lo mismo en Ensemble. Escribí un post en la comunidad de InterSystems en inglés, y me dijeron que utilizase RSAEncrypt().

He probado esto:

set json = "{""api_key"":""XXXXX"", ""id"":""1""}"

// Abrir el fichero de la clave pública:
set file = ##class(%FileCharacterStream).%New()
set file.Filename = "public.key"
set key = file.Read(file.Size)

// Encriptar el JSON
set jsonEncrypt = $System.Encryption.RSAEncrypt(json, key)

Pero no funciona, me devuelve un string vacío. He buscado por todas partes y no sé por qué no funciona. La clave pública tiene este formato:

-----BEGIN PUBLIC KEY-----
......
......
......
......
-----END PUBLIC KEY-----

Los saltos de línea son LF y está en UTF-8. En qué formato debe estar la clave pública para que funcione en Ensemble? Estoy haciendo algo mal?

Muchas gracias de antemano.

#Cifrado #Ensemble

URL de fuente:https://es.community.intersystems.com/post/opensslpublicencrypt-para-ensemble