How to save a variable’s value in a Bash Script function

Asked

Viewed 949 times

2

I am creating a factory to easily encrypt a file in this case in txt or decipher. The problem in this program is the value of the variable CIFRA_HEX and CIPHER that cannot pass the value saved to the following function (decipher_RC4() and cannot decrypt the file. How can I resolve this situation so that I can get the value of the keys in the function ? The implemented code is in Bash Script

    menu(){
case $opcao_menu in
1)echo "REVERSE CRYPTO 4" ;;
esac

echo "1 -> Cifrar"
echo "2 -> Decifrar"
echo "3 -> Voltar ao menu anterior"
echo "Escolha uma das seguintes opções:"

read opcao

case $opcao in
0);;    
1) cifrar_RC4 ;;
2) decifrar_RC4;;
esac
}


cifrar_RC4() {
nome="RC4"

echo -n "Introduza a chave de cifra que pertende criar:"; read CIFRA
CIFRA_HEX= openssl rand -hex 8 

if [[ -z "$CIFRA" ]]; then
echo $CIFRA_HEX
fi

echo -n "introduza o nome do ficheiro para cifrar:"; read ENTRADA_FICHEIRO 
echo -n "Introduza o nome para o ficheiro de saida cifrado:"; read SAIDA_FICHEIRO
echo -n "Deseja remover o ficheiro original?"

if [[ -z "$ENTRADA_FICHEIRO" ]]; then
echo "O ficheiro foi encriptado"    
fi

case $opcao_menu in
1) algoritmo_cifraRC4 ;;
2) algoritmo_cifraAES128 ;;
3) algoritmo_cifraAES256 ;;
esac

#read opcao

valor_chave=$CIFRA_HEX
echo "A cifra utilizada foi: " $nome

if [[ -z "$CIFRA" ]]; then

echo "A chave gerada foi: " $valor_chave
else
echo "A chave criada foi: " $CIFRA
fi

echo "O ficheiro criado foi:" $SAIDA_FICHEIRO



}

decifrar_RC4() {

echo -n "introduza o nome do ficheiro para decifrar:"; read SAIDA_FICHEIRO
echo -n "Introduza o nome para o ficheiro de saida:"; read ENTRADA_FICHEIRO

case $opcao_menu in
1) algoritmo_decifraRC4 ;;
2) algoritmo_decifraAES128 ;;
3) algoritmo_decifraAES256 ;;
esac

if [[ -z "$CIFRA" ]]; then
echo "A chave usada foi: " $CIFRA_HEX
else
echo "A chave usada foi: " $CIFRA
fi
echo "O ficheiro de saida foi: " $ENTRADA_FICHEIRO


}


algoritmo_cifraRC4(){
if [[ -z "$CIFRA" ]]; then
openssl enc -rc4 -e -K "$CIFRA_HEX" -in "$ENTRADA_FICHEIRO.txt" -out "$SAIDA_FICHEIRO.rc4"
else
openssl enc -rc4 -e -K "$CIFRA" -in "$ENTRADA_FICHEIRO.txt" -out "$SAIDA_FICHEIRO.rc4"
fi
}

algoritmo_decifraRC4(){ 
echo $valor_chave
if [[ -z "$CIFRA" ]]; then
openssl enc -rc4 -d -K "$CIFRA_HEX" -in "$SAIDA_FICHEIRO.rc4" -out "$ENTRADA_FICHEIRO.txt"
else
openssl enc -rc4 -d -K "$CIFRA" -in "$SAIDA_FICHEIRO.rc4" -out "$ENTRADA_FICHEIRO.txt"
fi
}
menu

1 answer

0


The only mistake I saw in your code was CIFRA_HEX= openssl rand -hex 8 if you want to put the result of the command inside the variable you must do so

CIFRA_HEX=$(openssl Rand -Hex 8)

see the result:

echo $CIFRA_HEX

2e7918cf12d2f50e

or so

CIFRA_HEX=`openssl Rand -Hex 8`

echo $CIFRA_HEX

2e7918cf12d2f50e

if you want the content as a string, you should put it between single quotes

CIFRA_HEX='openssl Rand -Hex 8'

echo $CIFRA_HEX

openssl Rand -Hex 8

Browser other questions tagged

You are not signed in. Login or sign up in order to post.