Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
Regex 验证数字签名密钥的Base64编码256位数字_Regex_String_Base64_Ed25519 - Fatal编程技术网

Regex 验证数字签名密钥的Base64编码256位数字

Regex 验证数字签名密钥的Base64编码256位数字,regex,string,base64,ed25519,Regex,String,Base64,Ed25519,我已经看到了许多关于如何检查Base64的RegEx答案,但我找不到一个专门用于256位数字表示的答案 我是Base64、字节转换和正则表达式的新手。似乎是检查Base64的最佳方法,但我无法从细节中判断它是否可以专门应用于256位数字的表示 ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$ 我需要确保这些字符串的有效性,因为我将它们用作Ed25519键的编码,并且我的字符串似乎接受非ASCII字符 我真的不明白这

我已经看到了许多关于如何检查Base64的RegEx答案,但我找不到一个专门用于256位数字表示的答案

我是Base64、字节转换和正则表达式的新手。似乎是检查Base64的最佳方法,但我无法从细节中判断它是否可以专门应用于256位数字的表示

^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
我需要确保这些字符串的有效性,因为我将它们用作Ed25519键的编码,并且我的字符串似乎接受非ASCII字符

我真的不明白这是否可以具体应用于256位数字的表示

^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$

RegEx如何验证Base64编码的256位数字?

我将采取以下步骤:

  • 运行现有的正则表达式以确定它是否为有效的base64
  • 如果为true,则从base64解码,查看是否有256位或32字节。
    • 我相信这是一个256位数字:
      ampqampqampqampqampqampqampqampqampqamo=
      当编码到base64时,所有256位数字的长度都相同。这意味着它们都将有43个字符,后跟1=表示总共44个字符。您应该能够使用它作为快捷方式来确定base64编码字符串表示256位的长度

    • 我将采取以下步骤:

      • 运行现有的正则表达式以确定它是否为有效的base64
      • 如果为true,则从base64解码,查看是否有256位或32字节。
        • 我相信这是一个256位数字:
          ampqampqampqampqampqampqampqampqampqamo=
          当编码到base64时,所有256位数字的长度都相同。这意味着它们都将有43个字符,后跟1=表示总共44个字符。您应该能够使用它作为快捷方式来确定base64编码字符串表示256位的长度

      正如portforwardpodcast指出的,一个256位的数字将被解码为43个字符,最后一个
      =
      作为填充符

      第43个字符表示的数字仅使用前四位,因此它只能是表示最后两位为零的数字的字符

      您可以制作一个比任何base64字符串更简单的正则表达式来验证它,因为您知道它应该有多长:

      ^[A-Za-z0-9+/]{42}[AEIMQUYcgkosw048]=$
      

      正如portforwardpodcast指出的,一个256位的数字将被解码为43个字符,最后一个
      =
      作为填充符

      第43个字符表示的数字仅使用前四位,因此它只能是表示最后两位为零的数字的字符

      您可以制作一个比任何base64字符串更简单的正则表达式来验证它,因为您知道它应该有多长:

      ^[A-Za-z0-9+/]{42}[AEIMQUYcgkosw048]=$
      

      我不认为bas64有什么特别的地方,当它最初是一个数字的时候。如果要验证它,请先解码。@Barmar感谢您查找Barmar!这是针对Ed25519密钥的,所以我需要非常确定用户给出的是一个真正的Base64编码的256bit数字。我使用的Base64 de/encoder似乎接受非ASCII字符,我认为在解码时Ed25519无法使用这些字符。我不认为bas64在原始是数字时有什么特殊之处。如果要验证它,请先解码。@Barmar感谢您查找Barmar!这是针对Ed25519密钥的,所以我需要非常确定用户给出的是一个真正的Base64编码的256bit数字。我使用的Base64 de/encoder似乎接受非ASCII字符,我认为在解码时Ed25519无法使用。感谢您回答portforwardpodcast!我用它作为数字签名密钥,所以我需要绝对确保。我可以使用该正则表达式,确保字符串长度为44,仅以一个结尾,但我需要100%确定。如果需要100%确定,则生成1000个随机密钥示例,base64编码,并检查它们的外观。根据维基百科,“Base64编码将三个八位字节转换为四个编码字符。”。一个八位字节是8位,所以你的密钥有32个八位字节。(32 / 3) * 4 = 42.6. Base64在末尾使用=填充来表示分数。再次感谢你的播客!我几乎可以肯定的是,我在某个地方读到,Base64编码的256位数字对于
      =
      之前的字符的可能性较小。您知道它们是什么以及如何检查吗?如果您使用的是256位密钥,则每个位都可以是任何值,这意味着它的格式没有限制。一旦转换为Base64,您的密钥就有可能看起来像任何东西(只要它是有效的Base64)。因此,您应该堆叠已有的正则表达式,然后再检查长度和最终字符。这应该是您所需要的一切。啊,这就是为什么当我使用非ASCII或违反
      =
      前面字符的限制时,它“起作用”的原因?谢谢你的帮助!感谢您回复portforwardpodcast!我用它作为数字签名密钥,所以我需要绝对确保。我可以使用该正则表达式,确保字符串长度为44,仅以一个结尾,但我需要100%确定。如果需要100%确定,则生成1000个随机密钥示例,base64编码,并检查它们的外观。根据维基百科,“Base64编码将三个八位字节转换为四个编码字符。”。一个八位字节是8位,所以你的密钥有32个八位字节。(32 / 3) * 4 = 42.6. Base64在末尾使用=填充来表示分数。再次感谢你的播客!我几乎可以肯定的是,我在某个地方读到,Base64编码的256位数字对于
      =
      之前的字符的可能性较小。您知道它们是什么以及如何检查吗?如果您使用的是256位密钥,则每个位都可以是任何值,这意味着它的格式没有限制。一旦你转换成Base64,哟