Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net base64编码下划线的替代方案_.net_Encoding_Azure - Fatal编程技术网

.net base64编码下划线的替代方案

.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。因为路径是公共的,所以我不喜欢

我们正在使用base64编码的文件系统/url安全变体,以便:

"=" replaced with ""  
"+" replaced with "-"  
"/" replaced with "_"  
我们现在使用的Azure blob存储不允许在容器名称中使用“\ux”

我们使用base64编码Guid。如果我将下划线替换为“0”,是否存在冲突风险

使现代化 我不知道为什么投票失败。但我想澄清一下

为什么不使用Guid?

  • Guid是我的应用程序中实体的id。因为路径是公共的,所以我不喜欢公开Id,所以我要对它进行编码
  • 我想要更短、更友好的路径。与下面的一个注释相反,base 64编码不再是:

    Guid:5b263cdd-2bc2-485d-83d4-81b96930dc5a
    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