很多 Windows 客户端的邮件软件都采用 MIME/Base64 的格式来对附件编码,而 Linux 下的 uuencode 软件缺省的编码方式为 UU ,所以,如果用 uudecode 来解开使用 base64 编码的信件附件时,会报告“No `begin' line”的错误。本文采用手工方法来解开这些邮件的附件。
普通的邮件的附件采用 Base64 编码,我们用普通的文本编辑器可以看到如下的内容:
------------B61881636C49720
Content-Type: application/octet-stream; name="test.bin"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="test.bin"
yv66vgADAC0AsAgAcwgAdAgAfggAgAgAgQgArAcAmgcAmwcAnAcAnQcAngcAnwcAoAcAoQcAogcA
owcApAcApQcApgoAEQA5CgARADoKAAkAOwoAEAA7CgAKADwKABIAPQkAEwA+CQATAD8JABMAQAkA
EwBBCQATAEIJABMAQwkAEwBECQATAEUJABMARgkAEwBHCgAQAEgLAA4ASQsADwBJCQASAEoLAAwA
SwkAEgBMCgAQAE0KAAoATgsADwBPCwAOAFALAA4AUQsADgBSCQASAFMJABIAVAsADgBVCQATAFYK
AAsAVwoAEABYCgANAFkKAAgAWgoACgBbDABcAGwMAF0AcQwAcgBhDAByAG8MAHIAcAwAggB6DACD
AHkMAIQAfQwAhQB8DACGAHsMAIcAeQwAiAB5DACJAHkMAIoAeQwAjAB5DACNAGgMAI4AYQwAjgB2
D
......
邮件的结尾为:
ACe4ADdNLLAAAAABAHgAAAA6AA4AAABFAA4ARgAQAEcAEgBIACEASQAmAEoAMQBLADYATABBAE0A
RgBOAFEATwBZAFAAZABRAGwAUgABAH8AAAACAJM=
------------B61881636C49720--
观察发现,uudecode 应该可以解开 Base64 编码的文件的,但是可能在头尾的处理方式上和 Win32 下的软件有不一致的地方。
我们采用 uuencode -m 选项对一个二进制文件编码,得到如下的内容:
begin-base64 750 -
f0VMRgEBAQAAAAAAAAAAAAIAAwABAAAAQIcECDQAAACcMgAAAAAAADQAIAAG
ACgAHgAbAAYAAAA0AAAANIAECDSABAjAAAAAwAAAAAUAAAAEAAAAAwAAAPQA
AAD0gAQI9IAECBMAAAATAAAABAAAAAEAAAABAAAAAAAAAACABAgAgAQIqA4A
......
结尾为:
R0xJQkNfMi4wAF9lbmQAaHRvbnNAQEdMSUJDXzIuMABjb25uZWN0QEBHTElC
Q18yLjAAX0lPX3N0ZGluX3VzZWQAc3ByaW50ZkBAR0xJQkNfMi4wAF9fZGF0
YV9zdGFydABzb2NrZXRAQEdMSUJDXzIuMABvcGVuaG9zdABfX2dtb25fc3Rh
cnRfXwA=
====
可以看到头和尾有所不同,因此我们直接编辑原来的文件,把头和尾修改为和以上方式一致以后,采用 uudecode -o output_name infile 就可以解开 base64 编码的信件附件了。