Проверка кодированных в Base64 256-битных чисел для ключей цифровой подписи
Я видел много ответов RegEx о том, как проверить Base64, но я не могу найти один специально для представления 256-битных чисел.
Я новичок в Base64, преобразование байтов и RegEx. Этот ответ кажется лучшим для проверки Base64, но я не могу судить по деталям, можно ли его специально применить к представлению 256-битного числа.
^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
Мне нужно убедиться в правильности этих строк, потому что я использую их в качестве кодировок ключей Ed25519, и мой en/decoder, кажется, принимает символы не ASCII.
Я не совсем понимаю, может ли это быть конкретно применено к представлению 256-битного числа.
Как RegEx может проверить 256-битное число в кодировке Base64?
2 ответа
Как указывал portforwardpodcast, 256-битное число будет декодировано в 43 символа с одним =
в конце как наполнитель.
Только первые четыре бита используются из числа, которое представляет 43-й символ, поэтому это может быть только символ, представляющий число, где два последних бита равны нулю.
Вы можете сделать более простое регулярное выражение для проверки этого, чем любая строка base64, поскольку вы точно знаете, как долго это должно быть:
^[A-Za-z0-9+/]{42}[AEIMQUYcgkosw048]=$
Я бы сделал следующие шаги:
- Запустите существующий RegEx, чтобы решить, является ли он действительным base64 или нет
- Если true, декодируйте из base64 и посмотрите, есть ли 256 бит или 32 байта.
- Я считаю, что это 256-битное число:
ampqampqampqampqampqampqampqampqampqampqamo=
Все 256-битные числа будут иметь одинаковую длину при кодировании в base64. Это означает, что все они будут иметь 43 символа, за которыми следует один = всего 44 символа. Вы должны быть в состоянии использовать это как ярлык для определения, что закодированная в base64 строка представляет 256 бит.
- Я считаю, что это 256-битное число: