문자열을 암호화/암호 해독하는 동안 openssl 오류가 발생했습니다.

문자열을 암호화/암호 해독하는 동안 openssl 오류가 발생했습니다.

bash 스크립트를 사용하여 비밀번호를 암호화하고 해독해야 합니다. 이를 위해 나는 openssl.

호스트 간에 비밀번호를 이동하기 때문에 복호화가 필요합니다.

이상하게도 암호화에는 만료 시간이 있는 것 같습니다.

암호화(bash 스크립트가 아님):

echo P@$$word| openssl enc -aes-128-cbc -a -salt -pass pass:pass_key

복호화(bash 스크립트에서):

dec_password=$(echo -n $1 | openssl enc -aes-128-cbc -a -d -salt -pass pass:pass_key)

암호화한 다음 스크립트를 실행하면 완벽하게 작동합니다.
그러나 암호화를 수행하고다음날 스크립트를 실행하여 암호 해독오류로 인해 실패합니다.

error reading input file

시간이 관련이 있는지 확실하지 않지만 그것이 변경되는 유일한 변수입니다.

어떤 아이디어가 있나요? 감사해요

답변1

비밀번호를 해독하기 위해 잠시 기다린 후 발생하는 오류와 해당 방법에 "만료 시간이 있는 것 같다"고 언급하신 이유는 생성된 난수가 salt시간이 지남에 따라 변경되기 때문입니다. (예: 매일 다릅니다)

암호화할 때 암호화된 비밀번호의 첫 번째 문자는 암호화할 때 사용되는 솔트입니다. 복호화할 때에도 동일한 솔트를 사용해야 합니다.

이전 버전의 MacOS/?에서 무솔트 암호화를 수행하려는 경우 주의하세요. openssl 버전에서는 -nosalt키워드를 사용해야 합니다 . openssl기본적으로 salt가 생성되어 사용됩니다.

따라서 솔트리스 암호화를 수행하려면 다음을 수행해야 합니다.

echo P@$$word| openssl enc -aes-128-cbc -a -nosalt -pass pass:pass_key

그러나 비밀번호를 저장할 때 비밀번호를 해독하고 나중에 스크립트를 비교하는 것은 나쁜 습관입니다.당신은 그것을 해독하지 않습니다:

비밀번호를 비교하는 방법은 비밀번호를 암호화하여 동일한 솔트(솔트를 사용하는 경우)로 확인하고 암호화된 문자열을 비교하여 일치하는지 확인하는 것입니다.

비밀번호를 저장하는 것이 아니라 시스템 간에 비밀번호를 전달하기 위한 것이라면 salt사용하는 것이 그다지 중요하지는 않지만 보안을 유지하는 데 도움이 된다는 점을 명심하세요.

그러나 암호화 강도에 대한 강력한 보안 요구 사항이 있는 경우 OpenSSL은 암호화 강도가 약한 반면 GnuPG는 openSSL보다 암호화 강도가 더 강력합니다.

답변2

$ echo P@$$word
P@74266word

$ echo 'P@$$word'
P@$$word

항상 문자열을 인용하는 것을 잊지 마세요. 또한 큰따옴표 변수 확장은 다음과 같습니다 $1.

$ ls
a_file

$ variable="a*"

$ echo $variable
a_file

$ echo "$variable"
a*

또한, 비밀번호를 비교하려면 복호화된 비밀번호가 아닌 암호화된 비밀번호를 비교해야 합니다. 솔트를 사용하는 경우 원래 비밀번호를 암호화하는 데 사용된 것과 동일한 솔트를 사용해야 합니다. OpenSSL은 이를 암호화된 데이터의 처음 8바이트에 저장합니다.

관련 정보