<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: base65</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/base65.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2008-08-28T09:57:56+00:00</updated><author><name>Simon Willison</name></author><entry><title>URLsafe base64 encoding/decoding in two lines</title><link href="https://simonwillison.net/2008/Aug/28/fam/#atom-tag" rel="alternate"/><published>2008-08-28T09:57:56+00:00</published><updated>2008-08-28T09:57:56+00:00</updated><id>https://simonwillison.net/2008/Aug/28/fam/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://fi.am/entry/urlsafe-base64-encodingdecoding-in-two-lines/"&gt;URLsafe base64 encoding/decoding in two lines&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A much better solution than my base65 hack—if you understand how base64 padding works (I didn’t) you can use it to generate URL-safe compressed hashes. Performance should be significantly better than my version.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/base64"&gt;base64&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/base65"&gt;base65&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/urlsafe"&gt;urlsafe&lt;/a&gt;&lt;/p&gt;



</summary><category term="base64"/><category term="base65"/><category term="python"/><category term="urlsafe"/></entry><entry><title>Django snippets: Sign a string using SHA1, then shrink it using url-safe base65</title><link href="https://simonwillison.net/2008/Aug/27/snippets/#atom-tag" rel="alternate"/><published>2008-08-27T22:18:49+00:00</published><updated>2008-08-27T22:18:49+00:00</updated><id>https://simonwillison.net/2008/Aug/27/snippets/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.djangosnippets.org/snippets/1004/"&gt;Django snippets: Sign a string using SHA1, then shrink it using url-safe base65&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I needed a way to create tamper-proof URLs and cookies by signing them, but didn’t want the overhead of a full 40 character SHA1 hash. After some experimentation, it turns out you can knock a 40 char hash down to 27 characters by encoding it using a custom base65 encoding which only uses URL-safe characters.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/base65"&gt;base65&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cookies"&gt;cookies&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cryptography"&gt;cryptography&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django-snippets"&gt;django-snippets&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hashes"&gt;hashes&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sha1"&gt;sha1&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/signedcookies"&gt;signedcookies&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/urls"&gt;urls&lt;/a&gt;&lt;/p&gt;



</summary><category term="base65"/><category term="cookies"/><category term="cryptography"/><category term="django"/><category term="django-snippets"/><category term="hashes"/><category term="python"/><category term="security"/><category term="sha1"/><category term="signedcookies"/><category term="urls"/></entry></feed>