gpg 오류 코드 2(GPG_ERR_UNKNOWN_PACKET)는 무엇을 의미합니까?

gpg 오류 코드 2(GPG_ERR_UNKNOWN_PACKET)는 무엇을 의미합니까?

저는 배치 스크립트 중 하나에서 발생한 gpg 오류에 대한 변경 사항을 해석하는 임무를 맡았습니다. 현재 지정된 파일에 대해 gpg 암호 해독을 수행하면 2가 반환됩니다. 문제는 양식을 검색할 때 파일이 올바르게 해독되었음을 표시하지만 오류 코드로 인해 0이 유일한 성공 값이라고 가정하므로 스크립트가 중지된다는 것입니다.

gpg -o XXX --decrypt XXX.gpg
RETVAL=$?
if [ RETVAL -ne 0 ]; then
    exit 1
fi

온라인으로 검색하여 gpg의 헤더 목록을 찾았습니다. 오류 2를 알 수 없는 패킷으로 정의합니다.

http://www.gnu-darwin.org/www001/src/ports/security/libgpg-error/work/libgpg-error-1.5/src/err-codes.h.in

표시되는 일반적인 오류 텍스트는 [gpg: [알 수 없음]: 잘못된 패킷(ctb=14)]입니다. 알 수 없는 패킷이 정확히 무엇을 의미하나요? 오류 코드 이해에 대한 문서를 검색하려고 합니다. [-vv] 옵션을 사용한 후 모든 세부 정보를 표시합니다. 결과 gpg 파일 암호 해독을 0 코드를 반환하는 파일과 비교했습니다. 내가 알아차린 유일한 점은 키의 바이트가 다르다는 것입니다.

오류 없는 gpg 암호 해독에는 다음과 같은 로그가 있습니다.

:pubkey enc packet: version 3, algo 16, keyid <16-hexdigit>
    data    1023 bits
    data    1024 bits

gpg 암호 해독으로 인해 오류가 발생하며 로그는 다음과 같습니다.

:pubkey enc packet: version 3, algo 16, keyid <16-hexdigit>
    data    1022 bits
    data    1022 bits

무슨 뜻이에요? 키 비트가 동일하지 않더라도 왜 올바르게 해독될 수 있습니까? 두 파일을 복호화하는 데 사용되는 키 ID와 비밀번호는 동일합니다. 또한 gpg.dll 오류를 설명하는 자세한 리소스를 아는 사람이 있습니까?

답변1

널리 사용되는 GPF 코드에는 세 가지 유형이 있습니다.

  1. 0은 성공을 나타냅니다(다른 모든 값은 실패를 나타냄).
  2. 2는 일반적으로 예상치 못한 오류에 사용됩니다.
  3. 1은 BAD 서명과 같은 것입니다.

--status-fd <file descriptor>오류를 식별하는 올바른 방법은 또는 의 출력을 해석하는 것입니다 --status-file <filename>.

이제 작업 중인 특정 문제에 대해 두 가지 가능한 이유가 있습니다.

  1. GPG는 암호화에 서명되지 않은 키를 계속 사용할 것인지 묻습니다. 어떤 사용자도 Y를 입력할 수 없으므로 오류가 발생합니다.

이 문제를 해결하려면 다음 스위치를 제공하십시오.

    --yes and --always-trust
  1. 권한 문제일 수도 있습니다. gpg가 액세스할 수 없는 디렉토리에 액세스하려고 하므로 치명적인 오류가 발생하여 실패합니다. (오류 코드 2)

homedir 지시어와 gpg가 쓸 수 있는 디렉터리를 지정하여 이 문제를 해결할 수 있습니다. 이와 같이:

   $cmd = "/usr/bin/gpg -a --recipient $to -e -o $outfile $infile --homedir /path/to/dir";

man gpg의 정보:

   --homedir directory
   Set the name of the home directory to directory

    If this option is not used it defaults to "~/.gnupg". It does not make sense to    use     this in a options file. This also overrides the environment variable $GNUPGHOME.

이것을 사용할 수도 있습니다협회이에 대해 자세히 알아보세요.

답변2

Linux에서 status-fd를 사용하는 한 가지 방법은 다음과 같습니다.

GPG="${PGP_LOCATION}gpg --status-fd 2 --passphrase-fd 0 --no-verbose --batch --output ${OUTPUT} --decrypt ${DOUTPUT}"
echo "GPG:${GPG}"
${GPG} 2>&1 >> ${STATUS} < ${PASSFILE}

모든 쉘 변수는 올바른 값을 가리키도록 설정되어 있습니다. gpg의 출력은 ${STATUS} (파일)에 캡처됩니다...

관련 정보