es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Descifrado de OpenSSL

Tengo una cadena cifrada y una clave asimétrica RSA. La cadena fue cifrada por PHP y su función openssl_public_encrypt con la parte pública de la clave y el relleno PKCS#1 v1.5. Quiero descifrar la cadena cifrada con Go lang y la parte privada de la clave.

Sé cómo descifrarlo en PHP:

<?php

$encrypted = filegetcontents('./encryptedString.txt');
$privKey = filegetcontents('./private.key');

opensslprivatedecrypt(base64_decode($encrypted), $decrypted, $privKey);

print_r($decrypted);

Sé cómo descifrarlo en Bash:


!/bin/bash cat encryptedString.txt | base64 -d > encryptedString64.txt openssl rsautl -decrypt -in ./encryptedString64.txt -inkey ./private.key

Quiero descifrar la cadena de la misma manera en GO lang. Ya he probado algunas funciones del paquete crypto/rsa:

func DecryptString(privKey *rsa.PrivateKey, encryptedString []byte) ([]byte, error) {

decryptedBytes, err := rsa.DecryptOAEP(sha256.New(), nil, privKey, encryptedString, nil)
if err != nil {
    return nil, err
}

return decryptedBytes, nil


}

func GetPrivateKey() (*rsa.PrivateKey, error) {
    pemString := ******************

block, _ := pem.Decode([]byte(pemString))
parseResult, _ := x509.ParsePKCS8PrivateKey(block.Bytes)
key := parseResult.(*rsa.PrivateKey)

return key, nil


}

…pero sigo obteniendo un error “crypto/rsa: error de descifrado” o resultados vacíos. ¿Qué me falta?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Es posible que necesite utilizar la función rsa.DecryptPKCS1v15 en lugar de rsa.DecryptOAEP para descifrar la cadena. La función rsa.DecryptPKCS1v15 utiliza el esquema de relleno PKCS#1 v1.5, que es el mismo esquema de relleno utilizado por la función openssl_public_encrypt en PHP.

Comments are closed.