부호화

uuencoding

uuencoding은 1980년 [1]UC Berkeley의 Mary Ann Horton이 작성Unix 프로그램uuuencodeuudecode에서 시작된 바이너리텍스트 부호화의 한 형태입니다.이것에 의해, 전자 메일 시스템에서의 전송용의 바이너리 데이터가 부호화됩니다.

"uuencoding"이라는 이름은 Unix-to-Unix Copy에서 유래했습니다. 즉, "Unix-to-Unix encoding"은 Unix 시스템에서 다른 Unix 시스템으로 임의의 파일을 전송하기 위한 안전한 인코딩입니다. 단, 개입하는 링크가 모두 Unix 시스템이라는 보장은 없습니다.전자 메일 메시지는 문자 집합이 다른 컴퓨터 또는 8비트 클린 이외의 전송을 통해 전달되거나 8비트 클린 이외의 프로그램에서 처리될 수 있으므로 전자 메일을 통해 바이너리 파일을 전송하면 손상될 수 있습니다.이러한 데이터를 대부분의 문자 집합에 공통적인 문자 서브셋으로 부호화함으로써 이러한 데이터 파일의 부호화된 형식이 "변환"되거나 파손되지 않을 가능성이 높기 때문에 수신처에 그대로 도착하게 됩니다.프로그램 uudecodeuuencode의 효과를 반전시켜 원래의 바이너리 파일을 정확하게 재작성합니다.uuencode/decode는 바이너리(특히 압축된) 파일을 이메일로 보내거나 Usenet 뉴스그룹 등에 게시하기 위해 인기를 끌었다.

현재는 주로 MIMEyEnc로 대체되었습니다.MIME에서는 uuuencoded되었을 가능성이 있는 파일이 base64 인코딩으로 전송됩니다.

부호화 형식

uuencoded 파일은 다음 형식의 헤더 행으로 시작합니다.

begin <mode> <file> <newline>

<mode>는, 파일의 UNIX 파일 권한으로서 3 자리수의 8 진수(644, 744 등)입니다.이것은 일반적으로 Unix와 유사한 운영 체제에서만 중요합니다.

<file>는 바이너리 데이터를 재작성할 때 사용하는 파일 이름입니다.

<newline>는, 각 행의 종료에 사용되는 새로운 행 문자를 나타냅니다.

각 데이터 행은 다음 형식을 사용합니다.

<length characters> <newline>

<length character>는, 그 회선상에서 부호화된 데이터 바이트수를 나타내는 문자입니다.이는 실제 바이트 수에 32를 더하여 결정되는 ASCII 문자이며, 0바이트를 나타내는 중대한 액센트 ''(ASCII 코드 96)를 제외하고 유일한 예외입니다.마지막 데이터 행(데이터 길이가 45로 분할되지 않은 경우)을 제외한 모든 데이터 행에는 45바이트의 부호화된 데이터(부호화 후 60자)가 있습니다.따라서 대부분의 길이 값은 'M'(32 + 45 = ASCII 코드 77 또는 'M')입니다.

<formatted characters>부호화된 문자입니다.실제 구현에 대한 자세한 내용은 포맷 메커니즘을 참조하십시오.

파일은 2행으로 끝납니다.

<newline> 종료 <newline>

두 번째에서 마지막 줄까지도 0바이트를 나타내는 중대 악센트가 있는 줄 길이를 나타내는 문자입니다.

완전한 파일로서 cat이라는 이름의 플레인텍스트 파일의 uuencoded 출력을 나타냅니다.txt에는 Cat의 캐릭터만 포함되어 있습니다.

644 cat을 시작합니다.txt #0V%T 종료

시작 행은 표준 uuencode 헤더입니다.'#'은 그 행이 3글자를 인코딩하고 있음을 나타냅니다.마지막 2행은 모든 uuuencode 파일의 끝에 표시됩니다.

포맷 메커니즘

의 메커니즘uuencoding 는, 3 바이트 마다 다음의 순서를 반복해, 인쇄 가능한 4 문자로 부호화합니다.각 문자는 기수 64 자리수를 나타냅니다.

  1. 소스로부터의 3바이트, 합계 24비트로 시작합니다.
  2. 4개의 6비트 그룹으로 분할합니다.각각은 0 ~63:비트(00 ~05), (06 ~11), (12 ~17) 및 (18 ~23) 범위의 값을 나타냅니다.
  3. 각 값에 32를 추가합니다.32를 더하면 32("스페이스")에서 95("_" 밑줄") 사이일 수 있습니다.특수 문자로서의 96('심각한 억양')은 이 범위의 논리적 확장입니다.공백 문자는 값 0의 인코딩으로 문서화되어 있지만, GNU [2]샤루틸스 등의 구현에서는 실제로는 파일 본문의 0을 인코딩하기 위해서도 중대 악센트 문자를 사용합니다.스페이스를 사용하지 않습니다.
  4. 이러한 숫자에 상당하는 ASCII 를 출력합니다.

소스 길이가 3으로 분할되지 않으면 마지막 4바이트 섹션에는 패딩 바이트가 포함되어 완전히 분할됩니다.이러한 바이트는 회선의 바이트에서 차감됩니다.<length character>디코더가 불필요한 문자를 파일에 추가하지 않도록 합니다.

uudecoding위의 역순으로 각 문자의 ASCII 코드(중대 악센트 사용을 설명하기 위해 modulo 64)에서 32를 빼면 6비트 값이 나오고 4개의 6비트 그룹을 연결하여 24비트를 얻은 후 3바이트가 출력됩니다.

부호화 프로세스는 위의 "Cat" 인코딩의 유래를 나타내는 이 표에 의해 설명됩니다.

오리지널 캐릭터 C a t
원래 ASCII, 10진수 67 97 116
ASCII, 바이너리 0 1 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 1 1 1 0 1 0 0
새로운 10진수 값 16 54 5 52
+32 48 86 37 84
Uuencoded 문자 0 V % T

uuencode 테이블

다음 표는 변환 프로세스 중에 얻은6비트필드의 10진수값과 대응하는 ASCII 문자 출력 코드 및 문자의 변환을 나타내고 있습니다.

일부 인코더는 심각한 액센트("', 코드 96") 대신 공간(코드 32)을 생성하는 반면 일부 디코더는 공간을 포함하는 데이터 디코딩을 거부할 수 있습니다.

여섯개
비트
ASCII
코드
ASCII
여섯개
비트
ASCII
코드
ASCII
여섯개
비트
ASCII
코드
ASCII
여섯개
비트
ASCII
코드
ASCII
여섯개
비트
ASCII
코드
ASCII
여섯개
비트
ASCII
코드
ASCII
여섯개
비트
ASCII
코드
ASCII
00 96 ` 10 42 * 20 52 4 30 62 > 40 72 H 50 82 R 60 92 \
01 33 ! 11 43 + 21 53 5 31 63 ? 41 73 I 51 83 S 61 93 ]
02 34 " 12 44 , 22 54 6 32 64 @ 42 74 J 52 84 T 62 94 ^
03 35 # 13 45 - 23 55 7 33 65 A 43 75 K 53 85 U 63 95 _
04 36 $ 14 46 . 24 56 8 34 66 B 44 76 L 54 86 V
05 37 % 15 47 / 25 57 9 35 67 C 45 77 M 55 87 W
06 38 & 16 48 0 26 58 : 36 68 D 46 78 N 56 88 X
07 39 ' 17 49 1 27 59 ; 37 69 E 47 79 O 57 89 Y
08 40 ( 18 50 2 28 60 < > 38 70 F 48 80 P 58 90 Z
09 41 ) 19 51 3 29 61 = 39 71 G 49 81 Q 59 91 [

다음은 한 줄짜리 텍스트 파일을 인코딩하는 예입니다.encoding 하는 예를 나타냅니다.이 예에서 %0D는 캐리지 리턴(CR)의 바이트 표현이고 %0A라인 피드(LF)의 바이트 표현입니다.

파일
파일 이름 = wikipedia-url.txt 파일 내용 = http://www.wikipedia.org%0D%0A
부호화
644 wikipedia-url을 시작합니다.txt ::'1T <#HO+W=W=RYW:6MI <&5D:6$N;W)G#0H' 종료

포크(파일, 리소스)

Unix는 전통적으로 파일 데이터를 저장하는 단일 포크를 가지고 있습니다.그러나 일부 파일 시스템은 단일 파일과 관련된 여러 포크를 지원합니다.예를 들어 기존 Mac OS HFS는 데이터 포크 및 리소스 포크를 지원했습니다.Mac OS HFS+는 Microsoft Windows NTFS 대체 데이터 스트림과 마찬가지로 여러 포크를 지원합니다.대부분의 uucoding 도구는 기본 데이터 포크의 데이터만 처리하므로 인코딩/복호화 시 정보가 손실될 수 있습니다(예를 들어 Windows NTFS 파일 설명은 다른 포크로 유지됩니다).(기존 Mac OS 애플리케이션 UUTool과 같은) 일부 툴은 서로 다른 포크를 하나의 파일로 연결하고 파일 이름으로 구분하여 문제를 해결했습니다.

xxencode, Base64 및 ASCII85와의 관계

제한된 문자 범위에도 불구하고 uuuencoded 데이터는 비 ASC를 사용하여 특정 컴퓨터를 통과할 때 손상될 수 있습니다.EBCDIC 등의 II 문자 세트.이 문제를 해결하기 위한 한 가지 시도는 xxencode 형식으로 영숫자와 플러스 기호와 마이너스 기호만 사용했습니다.현재 보다 일반적인 형식은 Base64 형식입니다.이것은 ASCII 32-95가 아닌 영숫자 전용의 같은 개념에 근거하고 있습니다.3가지 형식 모두 입력 데이터를 나타내기 위해 6비트(64자)를 사용합니다.

Base64는 uencode 프로그램에 의해 생성될 수도 있으며 실제 문자 변환을 제외하고 형식이 유사합니다.

헤더가 로 변경됩니다.

begin-base64 <모드> <파일>

예고편이 되다

====

및 행 사이의 행은 다음 중 선택된 문자로 인코딩됩니다.

ABCDEFGHIJKLMNOP QRSTUVWXYZabcdef ghijklmnopqrstuv wxyz0123456789+/

또 다른 대안으로는 ASCII85가 있습니다.ASCII85는 4개의 바이너리 문자를 5개의 ASCII 문자로 인코딩합니다.ASCII85는 PostScript 및 PDF 형식으로 사용됩니다.

단점들

uuencoding은 3개의 프리암호화 바이트를 4로 변환하고 시작/종료 태그, 파일 이름 및 딜리미터를 추가합니다.이렇게 하면 소스만 사용할 때보다 데이터 오버헤드가 33% 이상 증가하지만 파일을 uuencoding하기 전에 압축하여 최소한 어느 정도 보완할 수 있습니다.

언어 지원

파이썬

Python 언어는 코덱 "uu"를 사용하는 코덱 모듈을 사용하여 uuencoding을 지원합니다.

Python 2(2020년 1월 1일자로 폐지/일몰):

 $ python - c ' print " Cat " . encode " begin 666 < data > #0V%T   끝.$ 

코덱 모듈을 직접 Import하여 사용해야 하는 Python 3의 경우:

$ python3 - c "코덱에서 가져오기 인코딩; print (encode (b'Cat), 'uu')" b'begin 666 <데이터>\n#0V%\n\n\n' $ 

Perl 언어는 형식 문자열 "u"의 pack() 및 unpack() 연산자를 사용하여 기본적으로 uuencoding을 지원합니다.

$perl - e '인쇄팩('u', 'Cat', #0V%T'

언팩을 사용한 base64 디코딩도 마찬가지로 다음 문자를 변환하여 실행할 수 있습니다.

$ perl - e '$a="Q2F0", $a=~tr#A-Za-z0-9+/\.\_#cd; # non-base64 chars > $a=~tr#A-Za-z0-9+/# -#; #번역세트> print unpack("u",pack("C"),32+int(length($1)*6/8) . 1 ( ) 。{60}.+)//);'

「 」를 참조해 주세요.

레퍼런스

  1. ^ Horton, Mark. "UUENCODE(1C) UNIX Programmer's Manual". www.tuhs.org. Retrieved 2020-11-10.
  2. ^ "uuencode.c source". fossies.org. Retrieved 2021-06-05.

외부 링크

  • POSIX.1-2008의 uuencode 엔트리, http://pubs.opengroup.org/onlinepubs/9699919799/utilities/uuencode.html
  • GNU-sharutils - shar/unshar/uuencode/uudecode 유틸리티의 오픈 소스 스위트
  • UUDeview - Unix/Windows/DOS용 Base64, BinHex, uuencode, xxencode 등을 인코딩/복호화하는 오픈 소스 프로그램
  • UUENCODE-UUDECODE - Clem "Grandad" 색소에 의해 작성된 인코딩/디코딩을 위한 오픈 소스 프로그램
  • StUU - Stuart Cheshire의 Macintosh용 오픈 소스 고속 UUDecoder
  • UUENCODE-UUDECODE - 무료 온라인 UUEncoder 및 UUDecoder
  • Java UUDecoder - uuuencoded(메일) 첨부 파일을 디코딩하기 위한 오픈 소스 Java 라이브러리
  • AN11229 - NXP 어플리케이션 노트:UART ISP용 UU 인코딩