Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

base64 encoding alternative to underscore

We're using a file system/url safe variation of base64 encoding such that:

"=" replaced with ""  
"+" replaced with "-"  
"/" replaced with "_"  

We are now using Azure blob storage that does not allow use of "_" within container names.

We are base64 encoding a Guid. If I was to replace underscore with say a "0" am I at risk of collisions?

Update

Not sure why the downvote. But to clarify.

Why not just use a Guid?

  1. The Guid is the id of an entity within my application. Since the paths are public, I don't really like exposing the Id, hence why I'm encoding it.
  2. I want shorter and more friendly looking paths. Contrary to one of the comments below, the base 64 encoding is NOT longer:

    Guid: 5b263cdd-2bc2-485d-83d4-81b96930dc5a
    Base64 Encoded: 3TwmW8IrXUiD1IG5aTDcWg== (even shorter after removing ==)

(Another) Update

Seems there is some confusion about what it is I'm trying to achieve (so sorry about that). Heres the short version.

  • I have a Guid that represents an entity in my application.
  • I need to create a publicly accessible directory for the entity (via a Url).
  • I don't want to use the Guid as the directory name, for the reasons above.
  • I asked previously on SO about how I could generate a friendlier looking Url that guaranteed uniqueness and did not expose the original Guid. The suggestion was Base64 encoding.
  • This has worked fine until recently when we needed to use Azure blob storage, which does not allow underscores "_" in it's directory (Container) names.

This is where I'm at.

like image 475
Ben Foster Avatar asked Apr 10 '26 04:04

Ben Foster


2 Answers

Just "encode" the GUID in base16. The only characters it uses are 0123456789ABCDEF which should be safe for most purposes.

var encoded = guid.ToString("N");
like image 127
R. Martinho Fernandes Avatar answered Apr 11 '26 20:04

R. Martinho Fernandes


The base 64 character set is

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=

So you can't use 0 since it is already in use.

like image 42
David Heffernan Avatar answered Apr 11 '26 19:04

David Heffernan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!