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

时间:2014-01-16 00:59:20

标签: regex string base64 ed25519

我已经看到很多关于如何检查Base64的RegEx答案,但我找不到专门针对256位数字的表示。

我是Base64,字节转换和RegEx的新手。 This answer似乎是检查Base64的最佳选择,但我无法从详细信息中了解它是否可以专门应用于256位数的表示。

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

我需要确保这些字符串的有效性,因为我将它们用作Ed25519密钥的编码,而我的en/decoder似乎接受非ASCII字符。

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

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

2 个答案:

答案 0 :(得分:4)

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

只有前四位用于第43个字符所代表的数字,因此它只能是一个字符,表示最后两位为零的数字。

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

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

答案 1 :(得分:0)

我会采取以下步骤:

  • 运行现有的RegEx以确定它是否有效base64
  • 如果为true,则从base64解码并查看是否有256位或32字节。
    • 我认为这是256位数:ampqampqampqampqampqampqampqampqampqampqamo=所有256位数字在编码到base64时都具有相同的长度。这意味着它们将包含43个字符,后跟一个=总共44个字符。您应该可以使用它作为快捷方式来确定base64编码的字符串代表256位。