<commit_before># URLcrypt

Ever wanted to securely transmit (not too long) pieces of arbitrary binary data
in a URL? *urlencrypt* makes it easy!

This gem is based on the base32 gem from <NAME>.

URLcrypt uses a 256-bit AES symmetric encryption to securely encrypt data, and
and encodes and decodes Base 62 strings that can be used directly in URLs.

For example, this can be used to securely store user ids and the like when you 
access a web application from a place that doesn't have other authentication
mechanisms, like when you load an image in an email.

URLcrypt uses a modified Base 32 algorithm that doesn't use padding characters,
and doesn't use vowels to avoid bad words in the generated string.

The main reason why Base 32 is useful is that Ruby's built-in Base 64 support
is, IMO, looking ugly in URLs and requires several characters that need to be 
URL-escaped.

Unfortunately, some other gems out there that in theory could handle this 
(like the radix gem) fail with strings that start with a "\0" byte.
<commit_msg>README fixups<commit_after># URLcrypt

Ever wanted to securely transmit (not too long) pieces of arbitrary binary data
in a URL? *URLcrypt* makes it easy!

This gem is based on the base32 gem from <NAME>.

URLcrypt uses 256-bit AES symmetric encryption to securely encrypt data, and
and encodes and decodes Base 32 strings that can be used directly in URLs.

This can be used to securely store user ids, download expiration dates and 
other arbitrary data like that when you access a web application from a place 
that doesn't have other authentication or persistence mechanisms (like cookies):
 
  * Loading a generated image from your web app in an email
  * Links that come with an expiration date (à la S3)
  * Mini-apps that don't persist data on the server

URLcrypt uses a modified Base 32 algorithm that doesn't use padding characters,
and doesn't use vowels to avoid bad words in the generated string.

*Important*: As a general guideline, URL lengths shouldn't exceed about 2000 
characters in length, as URLs longer than that will not work in some browsers
and with some (proxy) servers. This limits the amount of data you can store
with URLcrypt.

The main reason why Base 32 is useful is that Ruby's built-in Base 64 support
is, IMO, looking ugly in URLs and requires several characters that need to be 
URL-escaped.

Unfortunately, some other gems out there that in theory could handle this 
(like the radix gem) fail with strings that start with a "\0" byte.

{'fraction_non_alphanumeric': 0.036653386454183264, 'fraction_numerical': 0.013147410358565738, 'mean_word_length': 4.275210084033613, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1128953', 'n_tokens_mistral': 698, 'n_tokens_neox': 614, 'n_words': 419}