Regex 验证数字签名密钥的Base64编码256位数字
我已经看到了许多关于如何检查Base64的RegEx答案,但我找不到一个专门用于256位数字表示的答案 我是Base64、字节转换和正则表达式的新手。似乎是检查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字符 我真的不明白这
^(?:[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位数字:
当编码到base64时,所有256位数字的长度都相同。这意味着它们都将有43个字符,后跟1=表示总共44个字符。您应该能够使用它作为快捷方式来确定base64编码字符串表示256位的长度ampqampqampqampqampqampqampqampqampqamo=
- 我相信这是一个256位数字:
- 运行现有的正则表达式以确定它是否为有效的base64
- 如果为true,则从base64解码,查看是否有256位或32字节。
- 我相信这是一个256位数字:
当编码到base64时,所有256位数字的长度都相同。这意味着它们都将有43个字符,后跟1=表示总共44个字符。您应该能够使用它作为快捷方式来确定base64编码字符串表示256位的长度ampqampqampqampqampqampqampqampqampqamo=
- 我相信这是一个256位数字:
- 我将采取以下步骤:
=
作为填充符
第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,哟