UUencoding - a take off on the redacted Epstein files

Way back when we used Usenet the files were UUencoded. To read a post your reader had to download the file and decode it. Worked fine for texts. Then someone worked out how to UUencode images. These were often multiple parts and the reader had to decode each one and stitch them together. This often failed. The most common failure was caused by the reader not finding all the parts.

But one failure was caused by the file not having the proper closing characters. In that case you could open the file in a text editor and fix the problem. I have long ago forgotten what that involved but it was fairly simple. BUT - if I recall correctly when you had that huge text file open you could sort of see the image in the text if you squinted. The image in question had to be a simple image with good contrast - like a person on a contrasting background. Anyone recall this?

Totally, although as a Mac-centric person I more often dealt with our equivalent way of converting binaries to text, which was BinHex. The first files I downloaded (or had sent to me as a series of email attachments) were BinHex.

But pretty soon I was also finding reasons for downloading files intended for PC users (especially fonts; we could use the same TrueType and PostScript fonts as Windows users), which meant being able to decode UUencoded binaries.

Hmm… are you sure you’re not accidentally mixing up uuencoding with ASCII art? There shouldn’t be an actual image format that would normally look like a picture if you opened it in a text editor.

Now, maybe someone found or calculated a specific image in a specific format that uuencoded to something resembling itself when viewed in a text editor with a certain font at a certain window size… but that would be quite the feat, and not a normal feature of the encoding… as far as I know…

Yeah, I think you’re conflating two things. Using uuencode (and later base64) to convert binary data to ascii, and using other software to convert images into ascii art. For example, here is the Lenna image converted to ascii art using the j2pa software (it looks right in the preview pane, apologies if it doesn’t post well). That particular tool might have been created in 2005, but others existed in the 90s.

xxdddxkxc;::::cclllllloollooollllollllllllc:ldxddddddddOX0ccclclllllcl
dxxdxxxdc;::::cclllllllllllllllllollllllllcc:odxxxxdddddOXkccccllll:'.
xxxxxxxdc;:::::clllllllllllllllllllllllllllc:ldxxxxxdddddOX0lccll:'...
xxxddxxdc;:::::cclllllllllloooddddolllllllcc:codddddddddookXKoc;......
xxocdxxdc,;::::cclllllllllooddxkkOOOkdlccccc:codddddodoooooxK0'.......
xl,:dxxd:,;::::ccccllccclllooodkOOOO000kd::::cdddocodoooooddc........,
c;;:dxxd:,;::::ccclccccccllooodxkO00KKKKXOc;;cdddo,,ldooodo'.......;ld
;;;:dxxd:,;;:::ccll:cccclooooldkO0000KKKKKXO;:oddo,.'cdddc.......'lodx
;;;:dxxd:,;;:::c:k::cclllllldkkkOOO000000KKK0coddo''ckKKX,......;odxxx
;:;:dxkxc,;::::clk:::cclllddxkkkOkkOOO00O00000kdxxx00KKKX;.....cdxxxdd
:;;:dkkxc,;:::::xxlc:ccloooddxxkxkkkkkkOOOOkkOO0000000O0O....'ldxxxxxd
;;;cdkkxc,;;;;:;kkdo:collooodddddddxxxxxxxkOO000000KOdoO....'odxxxxdxd
:::cdkkxc,;;:::;k0xoccllllloolc;,l::;,':kO0000000kdoclo,...'odxxxxdddd
:::cdkkxc,;;;;:::0kdclllllcc;''.,,,,':xkOOOOOOdllodxo,....'odxxxxxdddd
::;:dkkxc';;;;:::cKxlcllc:'''.,...,:okOkkkOO0Oc,:oo'......coxxxxxxxxdd
::;:dkkxl,;::::cc:Occlc;.'..''',.cddkOxxkO00KKk,.c:......codddddxxxxdd
::;;dkkkl,;::::ccl:ll:''.......;dxkkdodxkO000K0c.'l.....;oxxxxxddddddd
::;;okkkl,;::;:ood;,,,,'..'..'lk0xc;;c,:oxO0o:,,..o'...'odxdddxdddddoo
:;,,okkkl,;:;;cdc;'.',:.....'okkdc;::xdcldKd:c:...o,...ldxdddddddooodx
;;,'okOkl,:cll;'':;.';:,...,dklcodxxxxxooo0Odlc;..l;..;oxddddddooxOOOO
,,''okkkl,:c:;,,;:...'.l;.,dd.,lodxkkkxoolO0xol,..::..oxdddddoook00000
,,..okkkl,:c,:,;;c'..,:,.cdl.',cloddxxdllldKdo:...'o.cdddddddooO00KKKK
,,';dkkkl,;c','',:c.;.:c:o,..,;clooddddoodkkoc..''.o;oddddddoox00KKKKK
.'';dkkko;:c''',;,;:,oxl;....';clloolllooxdol...''.clddddddoolOKKKKKKK
..';dkkko,c;,.':::;:oxl,......';ccloolloddoc....,''cdddddddool0KKKKKKK
..':okkko':''..:;ccccc..........',cloodxxdc.....;,':dddddddoolKXKKKK0k
'..,okkko:;.'..,c,c:lc;.'.......';cllodddkxl:'..;,,colllllllcxKKK0x:''
ll;.ckkkdc..,','';,;cl;:'......''cllooodxkO00Kx:'''loooolc:c:xKKO;,,;;
'dd'ckkkd;....,..'';;ll,c.....':.cloooodxxkO00KXx..oddooooloxKK0:;::;:
.lx,:kkkd'....,....,;lccc''...:c'clooooddxxkO0KKXo.odooooloKKX0l;::;:;
.:x;:kkkd,........'',c;;.''..;l:;looooooddxxk00KKKcooooooldOKKo:;;;:;;
.,kl:xkko;.........;:,,'....;c:,looooooooddxkO0KKK0;;;;;:lxxKd,,;;;;;'
,:kd:xkOl,......'...,c;....,;,;looooooooooddxkO0KKKo::;,.c0xl'';;,;:,'
.,xkcxkOl.......;,'.,;,...,;cllllooooodooodddxkO0KK0;::cccc;;,;,,:c;..
..k0oxkOc...'',.,;,''.;'';cclllllooooodddddddxxkO0KKc;:clclc;,,,cl,..,

A uuencoded BMP file could certainly show traces of the original image, especially if it used 24 bits (3 bytes) per pixel, since each identically colored pixel would encode to the same 4 bytes of ASCII data.

In a statistical sense, sure — the UUencoding would still keep the same information, just encoded differently. It’s not encryption or compression. But to go from that to “still looks like the same pic to a person” is a stretch, I think. It would have to be an incredible coincidence (or a purposefully crafted image) for the resulting uuencoded chars to both match the aspect ratio of the original picture and for those chars, in a specific font, to approximate the saturation or lightness of any given pixel. I can believe that it’s possible that such images exist, but I don’t think that would be an expected or common outcome.

Given a 30x30 24-bit BMP like this:

(or in PNG form)

It uuencodes to this:

begin 644 24bit.bmp
M0DW^"@```````#8````H````'@```!X````!`!@``````,@*````````````
M````````````________________________________________________
M____________________________________________________________
M____________``#_____________________________________________
M____________________________________________________________
M______________\``/__________________________________________
M____________________________________________________________
M_________________P``________________________________________
M____________________________________________________________
M____________________``#_____________________________________
M____________________________________________________________
M______________________\``/__________________________________
M____________________________________________________________
M_________________________P``________________________________
M____________````````````````````````````____________________
M____________________________``#_____________________________
M______\```````````````````````````````````````````#_________
M______________________________\``/__________________________
M_____P```````````````````````````````````````````````````/__
M_________________________________P``________________________
M____````````````````````````````````````````````````````````
M````________________________________``#_____________________
M______\`````````````````````````````````````````````````````
M``````#_______________________________\``/__________________
M_____P``````````````````````````````````````````````````````
M`````````````/___________________________P``________________
M________````````````````````````````````````````````````````
M````````````````____________________________``#_____________
M__________\`````````````````````````````````````````````````
M``````````````````#___________________________\``/__________
M_________P``````````````````````````````````````````````````
M`````````````````````/___________________________P``________
M________________````````````````````````````````````````````
M````````````````````````____________________________``#_____
M__________________\`````````````````````````````````````````
M``````````````````````````#___________________________\``/__
M_____________________P``````````````````````````````````````
M`````````````````````````````/___________________________P``
M____________________________````````````````````````````````
M````````````````````````````________________________________
M``#___________________________\`````````````````````````````
M``````````````````````````````#_____________________________
M__\``/_______________________________P``````````````````````
M`````````````````````````````/______________________________
M_____P``____________________________________````````````````
M````````````````````````````________________________________
M________``#___________________________________________\`````
M``````````````````````#_____________________________________
M__________\``/______________________________________________
M____________________________________________________________
M_____________P``____________________________________________
M____________________________________________________________
M________________``#_________________________________________
M____________________________________________________________
M__________________\``/______________________________________
M____________________________________________________________
M_____________________P``____________________________________
M____________________________________________________________
M________________________``#_________________________________
M____________________________________________________________
M__________________________\``/______________________________
M____________________________________________________________
8_____________________________P``
`
end

Certainly you can make out that there is some repeated information in there, but I don’t think anybody would look at that and think “oh, it’s a circle”. Maybe if you played with the original image size so it just happens to match the line length (45 bytes?) of the uuencoded output.

The same image in monochrome (1-bit):

begin 644 test.bmp
M0DVV`````````#X````H````'@```!X````!``$``````'@`````````````
M`````````````````/___P#____\_____/____S____\_____/____S_\!_\
M_\`'_/^``_S_``'\_P`!_/X``/S^``#\_@``_/P``/S^``#\_@``_/X``/S_
M``'\_P`!_/^``_S_P`?\__`?_/____S____\_____/____S____\_____/__
"__P`
`
end

And a completely blank 30x30 24-bit bmp looks like this:

begin 644 blank.bmp
M0DW^"@```````#8````H````'@```!X````!`!@``````,@*````````````
M````````````________________________________________________
M____________________________________________________________
M____________``#_____________________________________________
M____________________________________________________________
M______________\``/__________________________________________
M____________________________________________________________
M_________________P``________________________________________
M____________________________________________________________
M____________________``#_____________________________________
M____________________________________________________________
M______________________\``/__________________________________
M____________________________________________________________
M_________________________P``________________________________
M____________________________________________________________
M____________________________``#_____________________________
M____________________________________________________________
M______________________________\``/__________________________
M____________________________________________________________
M_________________________________P``________________________
M____________________________________________________________
M____________________________________``#_____________________
M____________________________________________________________
M______________________________________\``/__________________
M____________________________________________________________
M_________________________________________P``________________
M____________________________________________________________
M____________________________________________``#_____________
M____________________________________________________________
M______________________________________________\``/__________
M____________________________________________________________
M_________________________________________________P``________
M____________________________________________________________
M____________________________________________________``#_____
M____________________________________________________________
M______________________________________________________\``/__
M____________________________________________________________
M_________________________________________________________P``
M____________________________________________________________
M____________________________________________________________
M``#_________________________________________________________
M____________________________________________________________
M__\``/______________________________________________________
M____________________________________________________________
M_____P``____________________________________________________
M____________________________________________________________
M________``#_________________________________________________
M____________________________________________________________
M__________\``/______________________________________________
M____________________________________________________________
M_____________P``____________________________________________
M____________________________________________________________
M________________``#_________________________________________
M____________________________________________________________
M__________________\``/______________________________________
M____________________________________________________________
M_____________________P``____________________________________
M____________________________________________________________
M________________________``#_________________________________
M____________________________________________________________
M__________________________\``/______________________________
M____________________________________________________________
8_____________________________P``
`
end

I think it would be possible to write code to algorithmically brute-force a BMP that does look like itself when uuencoded, but it doesn’t seem like the kind of thing that would naturally happen under normal circumstances.

I’d be stoked to be proven wrong, though.

AI was able to generate this image of 4 blue circles, for example:

That UUencodes into this:

begin 644 circle.bmp
M0DWZ!0```````%H````H````/`````@````!`!@`````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M```````````````````````@@@@@@@@@@@@@@```````````````````````
M``````````````````@@@@@@@@@@@@@@@@@@@@@@@@``````````````````
M```````````````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@```````````````
M`````````````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`````````````
M```````````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@```````````
M``````````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@``````````
M`````````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`````````
M````````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@````````
M```````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@```````
M```````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@```````
M``````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@``````
M``````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@``````
M``````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@``````
M``````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@``````
M```````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@```````
M```````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@```````
M````````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@````````
M`````````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`````````
M``````````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@``````````
M```````````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@```````````
M`````````````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`````````````
M```````````````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@```````````````
M``````````````````@@@@@@@@@@@@@@@@@@@@@@@@``````````````````
M```````````````````````@@@@@@@@@@@@@@```````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
`
end

But that was a specially generated image, not a natural occurrence. And it’s not really similar to the original image at all; they’re both just circular.

That’s a lot of work put into discussing something where the answer really is “the OP is conflating memories of Uuencode with ASCII art”.

The OP already starts off with garbled memories, thinking that text-based Usenet posts were UUencoded, with that later adapted for binaries, when Usenext text posts are…um…text, and UUencode specifically developed for binaries.

Well, it was an interesting premise! The more I thought about it, the more I was convinced it should be possible, but unlikely. I wanted to test it out to see if might actually happen in the wild.

I still wonder if maybe the OP actually did see something like that back in the day, whether by incredible coincidence or if someone actually took the time to craft such a self-referencing encoded image. It would be an interesting kind of steganography.

Heh, I was figuring that they could stick some data on the end of the image data that might be able to simultaneously be viewed as ASCII at the end of the UUencoding and not corrupt the image too much. I fooled around with it for a minute to see if I could get it to work, and then I got bored/distracted by something.

I wouldn’t expect it to be difficult, since many binary formats (images, movies, software) contain ways to basically skip parts of the encoding.

Well, I was not confusing uuencode with ASCII art. Those codes that are posted look strange, here is an example of a uuencode file:

What is that example supposed to show?

Those files look denser than my previous ones because they’re compressed (bzip2 files), whereas my images were raw bitmaps, with repeated uncompressed pixels.

But did you find one that looks like a picture once uuencoded?

Are there any text based encoding schemes which support having some kind of preamble instructions at the beginning for how to decode the text? Tools like UUencoding have predefined methods of converting the file from text and you’re stuck with what you get. If you want the output to look a certain way, you have to specially craft an input file so that the fixed UUencoding method produces text that appears to have a certain image. But if you could specify your own encoding/decoding methods, then you might be able to create special encoding rules such that the encoded text has a certain appearance.

I could see the benefit of having a text picture of the file in the encoding data. If you are looking at many unknown encoded files, being able to look at the text and get an idea of what the file represents would be helpful when working with the file. One way to do that would be to convert an icon of the image into ASCII art and put it at the top of the uuencoded file. The uudecode command will typically scan the file looking for the marker “begin fmode fname”, where fmode and fname are the file mode and file name of the decoded file. Anything before that line is typically ignored. So you should be able to put an ASCII art version of the image before that line and be able to get a visual indication of what picture the decoded data represents. But the ASCII art is not the enoded data. It’s just an elaborate comment at the top of the file.

Sure, many file formats have metadata blocks that allow comments. You could embed ASCII art in there. But that’s cheating :slight_smile:

For the purposes of showing a preview, JPEG can already embed a tiny thumbnail version of itself anyway, which is probably 10x larger than ASCII art, but still tiny.

On the other hand, it would be quite interesting to see an encoder which produces a lookalike bitmap of the original image using only the encoding scheme (where the encoded data itself, not additional ASCII art appended outside the actual data, visually looks like the original).

I think some viruses work like that, self-compiling themselves slightly differently with every instance so that their code looks different every time but still mostly does the same thing. https://www.malwarebytes.com/polymorphic-virus

It would be cool if one such artistic virus happened to produce works of art along the way :slight_smile:

Do you see an image in that when you squint?

Okay, you said “The image in question had to be a simple image with good contrast - like a person on a contrasting background.” I went to Copilot and prompted “Create a simple photo of a person on a contrasting background.” and got this:

I downsampled that image to 256x256 pixels, got a 262 kilobyte bitmap. I then UUencoded that, got a 367 kilobyte text file. Here is the text file, which can be UUdecoded to get the bitmap. Squint at that text and tell me if you can see the image.

(Try it quick, the file link expires after 24 hours.)

I’m guessing that if you got the linebreaks in the same place as the row ends, it’d be vaguely the same… except that the UUencoded version of a pixel would be several characters long, and so any “ghost image” would be extremely stretched horizontally.