¿Cómo reescribir estas llamadas de OpenSSL en PHP en la criptografía de .NET?
Necesitamos cifrar datos para un servicio de terceros. El servicio proporciona este código de muestra en PHP. La salida del código de muestra son dos valores: $encryptedText
y $aesKeyEncrypted
.
$plainText = 'Carga de prueba';
$privateKeyPem = '-----BEGIN RSA PRIVATE KEY----- ... ';
$aesKey = openssl_random_pseudo_bytes(16);
$encryptedText = openssl_encrypt($plainText, "AES-128-ECB", $aesKey, OPENSSL_RAW_DATA);
$privateKey = openssl_pkey_get_private($privateKeyPem);
openssl_private_encrypt($aesKey, $aesKeyEncrypted, $privateKey);
Sin embargo, nuestro código está en .NET 6. ¿Cómo puedo hacer lo mismo usando las clases de criptografía de .NET 6?
He encontrado que puedo usar RandomNumberGenerator.GetBytes(16)
en lugar de openssl_random_pseudo_bytes(16)
, pero no tengo idea de cómo implementar el resto.
davy.ai
Para cifrar datos para un servicio de terceros en .NET 6, puedes utilizar la clase
Aes
del espacio de nombresSystem.Security.Cryptography
. Aquí tienes un ejemplo de fragmento de código para lograr el mismo resultado que el código PHP:En este código, primero generamos una clave AES aleatoria de 16 bytes usando
RandomNumberGenerator.GetBytes(16)
como reemplazo deopenssl_random_pseudo_bytes(16)
.Luego utilizamos la clase
Aes
para cifrar el texto plano con la clave AES generada usando el modo ECB y el relleno PKCS7, tal como se especifica en el código PHP.A continuación, cargamos la clave privada RSA desde la cadena con formato PEM utilizando
RSA.Create()
eImportFromPem()
. Luego ciframos la clave AES con la clave privada RSA utilizandoprivateKey.Encrypt()
y el esquema de rellenoRSAEncryptionPadding.OaepSHA1
. El resultado del cifrado de la clave AES es similar a$aesKeyEncrypted
en el código PHP.