gpt4 book ai didi

无效 Base64 字符的正则表达式

转载 作者:行者123 更新时间:2023-12-05 08:21:10 29 4
gpt4 key购买 nike

如何创建 匹配所有无效 Base64 字符的正则表达式?我在堆栈上找到了 [^a-zA-Z0-9+/=\n\r].*$ 但是当我尝试时我得到了带有 - 符号的结果字符串.我根本不知道正则表达式,任何人都可以验证这是好还是坏的正则表达式?

最佳答案

对您的问题的简短回答是,如果消息包含来自类 [^A-Za-z0-9+/=\s] 的字符的任何匹配项,那么它包含一个无效的base-64 字符,MIME 消息除外,MIME 消息可以自由地将其他数据(用于各种目的)与 base-64 流混合在一起。 (这些其他字符在解码 base-64 对象之前被删除。)

作为一个有幸帮助编写了一个非常快速的 base 64 编码程序的内部结构的人,该程序使用每条机器指令处理多字节 block ,让我添加一些评论:

  • base-64 字母表是:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
  • 输出必须根据需要用零个或多个 = 符号填充,以便非空白字符的总长度是四的倍数。
  • 那些等号只能出现在base-64消息的末尾,并且最多可以有两个。
  • 不管是什么类型的空格都应该被忽略。通常消息被包装到一定的边距(必须是四的倍数),但这不是必需的。 base 64 编码的目的是将任意值(尤其是二进制数据)作为纯文本传输。理论上,您甚至可以使用 base 64 编码通过电话向某人阅读 JPEG 图片。

因此,对于验证 base-64 消息,我的建议是不仅仅是使用正则表达式。相反,

  1. 消除所有空格并将结果输出的长度称为z
  2. 计算 base-64 字母字符的 x 个数。
  3. 计算消息末尾的等号 y 个数。
  4. 如果 y 最多为 2 且 x + y = z 则返回有效,否则返回无效。

    • 注1:填充字符===对保护数据的完整性没有任何作用,base-64编码有很多衍生形式不使用它们。许多人认为填充几乎与 CRLF 行结束序列的 CR 部分一样无用和浪费处理时间。
    • 注意 2:用于 MIME 编码的变体接受将 base-64 字母表之外的字符包含在消息流中,但在解码 base-64 数据对象时简单地丢弃它们。
    • 注意 3:我不喜欢现代术语“Base64”,因为它是一个极其丑陋的词。这个假词从未被最初的 base-64 作者使用,但在接下来的九年的某个时候被采用。

您可以将大部分内容编码为正则表达式,如下所示(无需对最后一个 base-64 数据 block 进行精确长度检查):

^\s*(?:(?:[A-Za-z0-9+/]{4})+\s*)*[A-Za-z0-9+/]*={0,2}\s*$

enter image description here

关于无效 Base64 字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18661323/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com