[HN Gopher] Base64 Encoding, Explained ___________________________________________________________________ Base64 Encoding, Explained Author : software_writer Score : 46 points Date : 2023-10-23 05:28 UTC (3 hours ago) (HTM) web link (www.akshaykhot.com) (TXT) w3m dump (www.akshaykhot.com) | bediger4000 wrote: | > Base64 encoding takes binary data and converts it into text, | specifically ASCII text. | | Perpetuates the idea that there's "binary" and "text", which is | incorrect, but also implies you can't encode ordinary ASCII text | into base64. | farhanhubble wrote: | The article actually shows an example of text to base64 | encoding. But base64 is generally used for encoding data in | places where only ascii is admissible like URLs and inlined | binary blobs | jillesvangurp wrote: | It's part of a lot of web standards and also commonly used | for crypto stuff. E.g. the plain text files in your .ssh | directory are typically in base64 encoding; if you use basic | authentication that's $user:$passwd base64 encoded in a | header; you can indeed use it to have images and other inline | content in the url in web pages; email attachments are | usually base64 encoded. And so on. One of those things any | decent standard library for just about any language would | need. | Aachen wrote: | There is binary and text, though. Many bit sequences aren't | valid in a given text encoding (such as UTF-whatever) and so | trying to use them as text is an error. | | I understand what you mean, of course text can be represented | and treated as binary, and the inverse often as well although | it isn't necessarily true. Even in Windows-1252, where the | upper 127 characters are in use, there are control characters | such as null, delete, and EOT which I'd be impressed if a | random chat program preserves them across the wire. | | I also don't read an implication that ASCII couldn't be | converted to b64 | adamzochowski wrote: | There is also base64URL , where the encoding uses different ascii | characters that are url safe. I have seen some devs use BASE64URL | but call it just base64, and that can lead to some problems for | unaware. | | https://datatracker.ietf.org/doc/html/rfc4648#section-5 | JimDabell wrote: | The problem with base64url is that ~ and . are not letters. | This means that double-clicking on something encoded with | base64url isn't going to select the whole thing if you want to | copy-paste it. This is annoying needless friction in a huge | number of use cases. Base62 encoding (0-9A-Za-z) is almost as | efficient as base64url and retains URL safety but is more | easily copy-pasted. | | If you want to eliminate ambiguity for human readers, you can | drop to Base58 but in almost all cases, if you are BaseXX- | encoding something, it's long enough that copy-pasting is the | norm, so it doesn't usually matter. | | https://en.wikipedia.org/wiki/Base62 | iainmerrick wrote: | _The problem with base64url is that ~ and . are not letters._ | | No, typically the extra characters used are "-" and "_". | That's what the table in the IETF link shows. | Aachen wrote: | > The problem with base64url is that ~ and . are not letters. | This means that double-clicking on something encoded with | base64url isn't going to select the whole thing | | Well, you're in luck: tilde and dot aren't part of base64url | nly wrote: | Encoding and decoding base58 is a lot less efficient (needs | arithmetic multiplication with a carry across the stream). | | Base32 is sufficient in most cases and can avoid some | incidental swear words. | | If you want density go for Z85, which is a 4 -> 5 byte | chunked encoding and therefore much more efficient on a | pipelined CPU. | | https://rfc.zeromq.org/spec/32/ | erhaetherth wrote: | Funny. I'm trying to write a base50 encoder now. No good reason, | just 'cuz. Can't quite figure out what to do with the half a bit. | Gotta carry it forward somehow until I have a full char again but | haven't come up with a good scheme. | rustybolt wrote: | What do you mean, half a bit? A typical base50 encoder would | use 50 characters, so say 309 would get encoded as 69 (309 = 6 | * 50 + 9 * 1). | VMG wrote: | write a base-n encoder and use 50 as a parameter | benjaminwai wrote: | Just a note with the Bash encoding method. It should be with the | -n option: $ echo -n "abcde" |base64 | | Otherwise, without the -n, echo injects an extra newline | character to the end of the string that would become encoded. | manojlds wrote: | Yeah been bit by few times. Somehow keep forgetting. ___________________________________________________________________ (page generated 2023-10-23 09:00 UTC)