.net base64编码下划线的替代方案
我们正在使用base64编码的文件系统/url安全变体,以便:.net base64编码下划线的替代方案,.net,encoding,azure,.net,Encoding,Azure,我们正在使用base64编码的文件系统/url安全变体,以便: "=" replaced with "" "+" replaced with "-" "/" replaced with "_" 我们现在使用的Azure blob存储不允许在容器名称中使用“\ux” 我们使用base64编码Guid。如果我将下划线替换为“0”,是否存在冲突风险 使现代化 我不知道为什么投票失败。但我想澄清一下 为什么不使用Guid? Guid是我的应用程序中实体的id。因为路径是公共的,所以我不喜欢
"=" replaced with ""
"+" replaced with "-"
"/" replaced with "_"
我们现在使用的Azure blob存储不允许在容器名称中使用“\ux”
我们使用base64编码Guid。如果我将下划线替换为“0”,是否存在冲突风险
使现代化
我不知道为什么投票失败。但我想澄清一下
为什么不使用Guid?
Base64编码:3TwmW8IrXUiD1IG5aTDcWg==(删除后更短)
- 我有一个表示应用程序中实体的Guid李>
- 我需要为实体创建一个可公开访问的目录(通过 Url)李>
- 出于以下原因,我不想使用Guid作为目录名 上面李>
- 我之前问过我如何才能创造一个更友好的人 查找保证唯一性且不公开 原始Guid。这个建议是基于64编码的
- 直到最近,当我们需要使用Azure blob时,这种方法一直都很有效 存储,该存储不允许在其目录中加下划线“\u1” (容器)名称
这就是我所处的位置。基本64字符集是
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
因此,您不能使用0,因为它已经在使用中。您可以使用base60对数据进行编码,而不是使用base64并更改4个字符 base60字符列表不包含您不喜欢的4个字符,因此无需替换任何字符。只需在中“编码”GUID即可。它使用的唯一字符是0123456789ABCDEF,在大多数情况下应该是安全的
var encoded = guid.ToString("N");
对标识符进行编码不会对其进行加密。任何技术娴熟的观察者都可以对标识符进行编码。如果你想让你的路径不透明,那么要么加密它们,要么用盐把它们散列。如果您确实想保持路径的透明,只需使用不带连字符或大括号的十六进制。这样,您的UUID被序列化为32个代码点,而Azure容器名称的长度可以高达63个字符
如果你真的想要更短更有趣的容器名,如果Azure支持国际化域名,盲文编码是最不适合的选项。下面是一个Haskell one liner,用于生成UUIDv4,将UUID的每个八位字节映射到盲文字母,并将生成的字符串编码为UTF-16BE(总共32个八位字节)
导入数据。二进制(编码)
导入Data.ByteString.Lazy(散布,cons)
导入数据。函子(())
导入Data.UUID.V4(nextRandom)
盲文::IO Data.ByteString.Lazy.Internal.ByteString
盲文=nextRandom编码穿插40 cons 40
(在F#中,将使用|>代替。)
为了让您感到有趣,请参阅以下要点,了解如何将八位字节流转换为UTF-16LE或UTF-8编码的盲文字符串,从而使每一位真正脱颖而出
为什么需要使用base-64编码来编码GUID?GUID中唯一有效的字符是“{”、“0”-“9”、“a”-“F”和“-”。“让我们用base64编码GUID,因为GUID有无效字符,base64有更多字符”背后的思考过程是什么?@Ben:base64编码的数据总是比原始数据长。@Ben告诉我们你到底想做什么。听起来你想加密而不是编码。使用Base16比使用base64的字符串长33%。话虽如此,如果OP发现一个24个字符的随机字符串“短且友好”,那么我相信他们也不会对一个32个字符的字符串有太大的麻烦。@LukeH但它友好了400%,因为它使用的字符不那么清晰!:)@马丁尼奥,同意。我还更新了我的问题,为什么我要编码。我是否有与此冲突的风险?@Ben:这是一个1对1映射,因此只有当您有冲突的GUID时才会发生冲突。@Ben:我以为您需要某种方式来编码一个没有任何无效字符的GUID。这个适合那个目的。如果你不告诉我你还有什么其他要求,我不会建议你选择。
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