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?
davy.ai
Es posible que necesite utilizar la función
rsa.DecryptPKCS1v15
en lugar dersa.DecryptOAEP
para descifrar la cadena. La funciónrsa.DecryptPKCS1v15
utiliza el esquema de relleno PKCS#1 v1.5, que es el mismo esquema de relleno utilizado por la funciónopenssl_public_encrypt
en PHP.