UUENCODE
UUENCODE
uuencode 指令,可以將二進位檔轉換成七位元的檔案,傳送到另一架機器上再以 uudecode 還原。
目錄
uuencode是將二進位文件轉換為文本文件的過程,轉換后的文件可以通過純文本e-mail進行傳輸,在接收方對該文件進行uudecode,即將其轉換為初始的二進位文件。
uu 編碼
uuencode 編碼方式用於將任意的二進位文件轉換為文本文件,比如email.轉換后的文件中僅包含可列印字元.
uuencode 運演演算法則將連續的 3位元組編碼轉換成 4位元組(8-bit 到 6-bit)的可列印字元. 該編碼的效率高於Hex 格式.
從二進位文件中讀取 3位元組的數據,表示如下(a7 表示 a位元組的第 7位):
a7a6a5a4a3a2a1a0 b7b6b5b4b3b2b1b0 c7c6c5c4c3c2c1c0
轉換它們到4位元組里為如下所示:
0 0 a7a6a5a4a3a2 0 0 a1a0b7b6b5b4 0 0 b3b2b1b0c7c6 0 0 c5c4c3c2c1c0
然後,每個位元組再加 0x20轉換為可列印的字元.
注意:如果是一個 0位元組那它應該被轉換為0x60而不是0x20,因為(前引用'`')優於 0x20(空格' ').
例如:從文件中讀取的 3位元組如下:
14 0F A8
00010100 00001111 10101000
轉換為 6-bit:
000101 000000 111110 101000
每位元組高兩位補 0後為:
00000101 00000000 00111110 00101000
最後每位元組再加 0x20,則 4位元組輸出應該為:
25 60 5E 48
注意: 00位元組被轉換為 0x60而不是 0x20.
因此,在一個 uuencoded文件中僅包含字元 0x21 '!'到 0x60 '`',它們都是可列印和可被 email傳送的.
這個轉換過程也意味著 uuencoded 文件要比原文件大 33%的.
===== 編碼 =====
outbuf[4] 輸出 uu編碼數據.
inbytep [3] 輸入二進位數據.
#define ENCODE_BYTE(b) (((b) == 0) 0x60 : ((b) + 0x20))
outbuf [0] = ENCODE_BYTE((inbytep [0] & 0xFC) >> 2);
outbuf [1] = ENCODE_BYTE (((inbytep [0] & 0x03) << 4) +
((inbytep [1] & 0xF0) >> 4));
outbuf [2] = ENCODE_BYTE (((inbytep [1] & 0x0F) << 2) +
((inbytep [2] & 0xC0) >> 6));
outbuf [3] = ENCODE_BYTE (inbytep [2] & 0x3F);
===== 解碼 =====
linep [4] 輸入 uu編碼數據.
outbyte [3] 輸出二進位數據.
#define DECODE_BYTE(b) ((b == 0x60) 0 : b - 0x20)
outbyte [0] = DECODE_BYTE (linep [0]);
outbyte [1] = DECODE_BYTE (linep [1]);
outbyte [0] <<= 2;
outbyte [0] |= (outbyte [1] >> 4) & 0x03;
outbyte [1] <<= 4;
outbyte [2] = DECODE_BYTE (linep [2]);
outbyte [1] |= (outbyte [2] >> 2) & 0x0F;
outbyte [2] <<= 6;
outbyte [2] |= DECODE_BYTE (linep [3]) & 0x3F;