Conhecer o algoritmo RC2 não é suficiente; você também precisa combinar o modo de operação e para alguns modos de esquema de preenchimento. A linha de comando OpenSSL (e também a maior parte da API EVP) é padronizada para o modo CBC e o preenchimento "PKCS5" (tecnicamente PKCS7), que pode ou não estar correto.
openssl enc
por padrão é a criptografia e decriptografia baseada em senha , que significa a chave real e IV (exceto ECB, que não tem IV) usada para o cifra é derivada por um processo de hash chamado Função de derivação de chave baseada em senha (PBKDF) - e uma não padronizada para inicializar; qualquer argumento que você der como -iv
é ignorado - o que é bom porque o argumento que você deu é inválido, veja abaixo. O OpenSSL PBKDF (como outros melhores) usa um 'salt' aleatório que deve ser armazenado em um formato específico do OpenSSL no início do texto cifrado, e a falta desse salt está causando sua mensagem de erro bad magic number
. Para obter mais detalhes, consulte link .
Como você tem a chave, NÃO uma senha e o IV, converta os dois em hex (não em base64) e use:
openssl enc -base64 -d -rc2[-mode] -K $key_in_hex -iv $iv_in_hex
# note that's -K uppercase not -k lowercase
# you can use -a as a synonym for -base64
# For a block mode like CBC if standard PKCS5/7 padding wasn't used
# add -nopad and handle the last few bytes manually as needed.
# If your input is more than 76 chars per line (as your Q showed)
# and OpenSSL version before 1.1.0 you also need -A (uppercase).
Existem muitas maneiras de converter base64 para hexadecimal, mas uma conveniente é:
somevar=$( echo some_base64 | openssl base64 -d | xxd -p )
# xxd -p outputs only the hex with no labels or ASCII etc
# and thus is suitable as an argument to openssl enc
# without any processing by tools like sed, tr, awk