openssl에서 항상 "출력 파일 쓰기 오류" 발생

openssl에서 항상 "출력 파일 쓰기 오류" 발생

openssl다음 명령을 사용하여 5MiB 임의 파일을 만들었습니다 head.

$ openssl enc -aes-256-ctr -pass pass:1o0SxTnYvbtjFtKLiuv3ccPebLOJiUU -nosalt < /dev/zero | head -c 5M > /mnt/pny1/file1

올바른 크기의 파일이 생성되지만 오류 메시지도 표시됩니다.

error writing output file

나는 이것을 시도했고 dd같은 결과를 얻었습니다.

$ openssl enc -aes-256-ctr -pass pass:1o0SxTnYvbtjFtKLiuv3ccPebLOJiUU -nosalt < /dev/zero | dd of=/mnt/pny1/file2 bs=1M count=5 iflag=fullblock
5+0 records in
5+0 records out
error writing output file
5242880 bytes (5.2 MB) copied, 0.0194212 s, 270 MB/s

openssl그런 다음 다음을 사용하여 루프 장치를 재정의하려고 시도했습니다 cat.

# openssl enc -aes-256-ctr -pass pass:1o0SxTnYvbtjFtKLiuv3ccPebLOJiUU -nosalt < /dev/zero | cat > /dev/loop0
cat: write error: No space left on device
error writing output file

언제나 error writing output file.

이 오류가 발생하는 이유와 이를 방지하는 방법은 무엇입니까?

답변1

이것은 openssls 쌍입니다 . 또한 SIGPIPE5MB를 받으면 파이프를 닫습니다 . openssl 프로세스가 파이프에 쓰기를 시도하면 시스템 호출에 오류가 생성됩니다.headddEPIPEwrite()

EPIPE    fd is connected to a pipe or socket whose reading end is closed. When this
         happens the writing process will also receive a SIGPIPE signal.

그런 다음 정상적으로 종료되는 대신 신호로 인해 openssl이 종료됩니다. 예제에서 다음 명령을 사용하여 이를 확인할 수 있습니다.

$ openssl enc -aes-256-ctr -pass pass:password -nosalt < /dev/zero | head -c 5M >file
error writing output file
$ echo ${PIPESTATUS[@]}
1 0

$PIPESTATUS배열에는 파이프 내 프로세스의 종료 값이 포함됩니다. openssl 프로세스가 종료 코드 1로 종료된 것을 볼 수 있습니다.


그러나 오류를 극복하려면 파이프라인에서 openssl 이전에 또는 를 사용하십시오 head.dd

$ head -c 5M /dev/zero | openssl enc -aes-256-ctr -pass pass:password -nosalt >file
$ echo ${PIPESTATUS[@]}
0 0

답변2

너무 적은 양의 데이터가 해독되면 이 문제가 발생할 수 있습니다. 나는 GNU 병렬 유틸리티를 사용했습니다. 이 문제가 발생했습니다(출력 파일에 쓰는 동안 오류가 발생했습니다). --blocksize를 사용하여 블록의 최소 크기를 추가하여 이 문제를 해결하세요. 또한 openssl은 약간 이상합니다. 내가 가진 모든 문제에 대해 이 오류(잘못된 암호 해독, 잘못된 암호 해독 데이터)를 반환합니다. 그러니 조심해.

답변3

다른 답변으로도 문제가 해결되지 않으면메시지를 채워보세요더 긴 길이로.

키 길이 또는 그 배수를 사용하십시오.

위 질문에는 다른 답변이 없었기 때문에 제가 인코딩하고 있는 메시지를 확인해 보기로 했습니다. 시간이 짧습니다. 키 길이만큼 공백을 채워서 문제가 해결되었습니다.

관련 정보