我们正在使用base64编码的文件系统/ url安全变体,以便:
"=" replaced with ""
"+" replaced with "-"
"/" replaced with "_"
我们现在使用Azure blob存储,不允许在容器名称中使用“_”。
我们是base64编码 Guid 。如果我要用“0”替换下划线,我是否有碰撞风险?
不确定为什么要downvote。但要澄清一下。
为什么不使用Guid?
我想要更短更友好的路径。与下面的评论之一相反,基本64编码不再是:
指导:5b263cdd-2bc2-485d-83d4-81b96930dc5a
Base64编码:3TwmW8IrXUiD1IG5aTDcWg ==(删除后更短==)
似乎对我正在努力实现的目标存在一些困惑(对此抱歉)。这是短版本。
这就是我所在的地方。
答案 0 :(得分:7)
只需在base16中“编码”GUID即可。它使用的唯一字符是0123456789ABCDEF,对于大多数用途来说应该是安全的。
var encoded = guid.ToString("N");
答案 1 :(得分:1)
基本64字符集是
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
所以你不能使用0,因为它已经在使用。
答案 2 :(得分:0)
您可以在base60中对数据进行编码,而不是使用base64并更改4个字符。
您的base60字符列表不包含您不喜欢的4个字符,因此无需替换任何内容。
答案 3 :(得分:0)
对标识符进行编码不会对其进行加密。任何精通技术的观察者都可以对标识符进行base64解编码。如果要使路径不透明,请对其加密或用盐对其进行哈希处理。如果确实要保持路径透明,请使用不带连字符或大括号的十六进制。这样,您的UUID会序列化为32个代码点,而Azure容器名称最多可以包含63个字符。
如果您确实想要更短,更有趣的容器名称,并且如果Azure支持国际化域名,则盲文编码适合作为最少可印刷的选项。这是一个Haskell单行代码,用于生成UUIDv4,将UUID的每个八位字节映射到盲文字母,并以UTF-16BE(总共32个八位字节)编码结果字符串。
import Data.Binary (encode)
import Data.ByteString.Lazy (intersperse, cons)
import Data.Functor ((<&>))
import Data.UUID.V4 (nextRandom)
braille :: IO Data.ByteString.Lazy.Internal.ByteString
braille = nextRandom <&> encode <&> intersperse 40 <&> cons 40
(在F#中,将使用|>代替<&>。)
为了娱乐,请参见以下要点,以了解如何将八位字节流转换为UTF-16LE或UTF-8编码的盲文字符串,从而使每一位字面上都脱颖而出。
https://gist.github.com/bjartur/ea5db281f0b88128455ed79621abbd1d