确定字符串是否经过两次 Base64 编码

2024-01-02

有什么方法可以确定字符串是否经过两次 Base64 编码?

例如,是否有我可以使用的正则表达式模式preg_match去做这个?


(实际答案。)不要使用正则表达式。使用解码你的字符串base64_decode() http://php.net/manual/en/function.base64-decode.php是可选的$strict参数设置为true并查看它是否符合您期望的格式。或者在允许的情况下尝试多次解码。例如。:

function base64_decode_multiple(string $data, int $count = 2) {
    while ($count-- > 0 && ($decoded = base64_decode($data, true)) !== false) {
        $data = $decoded;
    }
    return $data;
}

(理论答案。)双基 64 编码字符串are常规,因为正确对 Base64 编码消息进行 Base64 编码的字节序列数量有限。

您可以检查某些内容是否是 base64 编码的once因为您可以验证每组四个字符。 Base64 编码消息中的最后四个字节可能是一种特殊情况,因为=s 用作填充。使用正则表达式:

<char>           := [A-Za-z0-9+/]
<end-char>       := [A-Za-z0-9+/=]
<chunk>          := <char>{4}
<end-chunk>      := <char>{2} <end-char>{2} | <char>{3} <end-char>
<base64-encoded> := <chunk>* <end-chunk>?

您还可以确定某些内容是否是 base64 编码的twice使用正则表达式,但解决方案并不简单或漂亮,因为一次检查 4 个字节是不够的。

Example:“QUFBQQ==”base64 解码为“AAAA”,base64 解码为三个 NUL 字节:

$ echo -n "QUFBQQ==" | base64 -d | xxd
00000000: 4141 4141                                AAAA

$ echo -n "AAAA" | base64 -d | xxd
00000000: 0000 00                                  ...

此时,我们可以枚举所有双 Base64 编码,其中 Base64 编码为 Base64 字母表中的 4 个字节(“AAAA”、“AAAB”、“AAAC”、“AAAD”等),并将其最小化:

<ugly 4> := QUFBQQ== | QUFBQg== | QUFBQw== | QUFBRA== | ...

我们可以枚举所有双 Base64 编码的前 4 个字节,其中 Base64 编码为 8 字节或更长(不涉及填充的情况)=)并最小化:

<chunk 4> := QUFB | QkFB | Q0FB | REFB | ...

双 Base64 编码字符串的一个分区(漂亮的分区)将不包含=s 位于末尾;它们的长度是 8 的倍数:

<pretty double-base64-encoded> := <chunk 4>{2}*

双 Base64 编码字符串的另一个分区的长度是 4 的倍数但不是 8(4、12、20 等);它们可以被认为是漂亮的,但最后却有一点丑陋:

<ugly double-base64-encoded> := <chunk 4>{2}* <ugly 4>

然后我们可以构造一个组合的正则表达式:

<double-base64-encoded> := <pretty double-base64-encoded>
                         | <ugly double-base64-encoded>

正如我所说,您可能不想仅仅因为双 Base64 编码消息而经历所有这些混乱are常规的。就像您不想检查整数是否在某个有限区间内一样。另外,这是一个很好的例子,当你应该问另一个问题时却得到了错误的答案。 :-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定字符串是否经过两次 Base64 编码 的相关文章

  • Ace Editor 自动完成和多种语言

    如何为 Ace 编辑器创建自动完成功能以及如何突出显示 php 中的 html javascript 和 csshttp ace ajax org http ace ajax org
  • php / phpDoc - @return $this 类的实例?

    如何在 phpDoc 中将方法标记为 返回当前类的实例 在下面的示例中 我的 IDE Netbeans 将看到 setSomething 始终返回foo object 但如果我扩展对象 情况就不是这样了 它会返回 this 在第二个示例中是
  • 通过字符串操作预防 PHP SQL 注入[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 中防止 SQL 注入的最佳方法 https stackoverflow com questions 60174 best way to prevent sql injection in php
  • 测试 CodeIgniter 会话变量的正确方法是什么?

    获取以下代码片段 测试确保会话变量不为空的最佳方法是什么 如果稍后在我的脚本中 我调用以下内容 第一个打印正确 但在第二个我收到消息 未定义的变量 已登录 我尝试过使用 empty and isset 但两者均未成功 我还尝试使用向后执行
  • 如何处理PDO异常[重复]

    这个问题在这里已经有答案了 我正在尝试与PDOphp 上的类 但我在找到处理错误的正确方法时遇到了一些麻烦 我编写了以下代码
  • Symfony/Doctrine 重新排列数据库列

    当我使用doctrine schema update命令行生成表时 Doctrine 或Symfony 似乎想要添加一个命令来重新排列我的列 将键放在它出现的前面 我想知道是否 更希望在哪里 我可以禁用环境的这个 功能 所以当我去生成我的表
  • 匹配一对未转义的平衡分隔符

    如何匹配一对不被反斜杠转义的平衡分隔符 本身不被反斜杠转义 无需考虑嵌套 例如 对于反引号 我尝试了此操作 但是转义的反引号无法按转义的方式工作 regex lt lt hello how are you gt 1 how expected
  • 替换第二个和第三个下划线之间的任何内容

    我有一个 PowerShell 脚本行 它用 替换 删除 第二个和第三个下划线之间的字符 get childitem pdf rename item newname name replace p L p L 例子 12345 00001 L
  • 将 Regex 对象分配给 html 输入模式

    我需要以编程方式将正则表达式对象分配给输入元素模式属性 以下是我当前的实现 var regex d 5 element attr pattern regex toString slice 1 1 有没有更好的方法来做到这一点而不需要字符串操
  • 软删除最佳实践(PHP/MySQL)

    Problem 在处理产品和订单的 Web 应用程序中 我想维护前员工 用户 与他们处理的订单之间的信息和关系 我想维护过时产品和包含这些产品的订单之间的信息和关系 然而 我希望员工能够整理管理界面 例如删除前员工 过时的产品 过时的产品组
  • Chart.js - 使用 mysql 和 php 从数据库获取数据

    我正在尝试将静态数据转换为使用数据库结果 我将使用MySQL and PHP 示例代码 var randomScalingFactor function return Math round Math random 100 var lineC
  • Php Curl HTTP POST REQUEST 使用嵌套键值对设置自定义标头

    如何使用 Curl 在 php 中设置此标头 CustomInfo 元素是数组 嵌套键值对 AuthenticationInfo 元素是数组 嵌套键值对
  • 一次用 \r\n & \n & \r 分解字符串? [复制]

    这个问题在这里已经有答案了 我想按行分割字符串 但我希望它基于所有主要使用的换行符 n r n r 并返回一个包含每一行的数组 您可以使用正则表达式和preg split http php net preg split反而 lines pr
  • 如何下载临时文件

    我正在尝试创建一个简短的 PHP 脚本 该脚本采用 JSON 字符串 将其转换为 CSV 格式 使用fputcsv 并使该 CSV 可作为下载的 csv 文件使用 我的想法是使用tmpfile 不用担心 cronjobs 或磁盘空间不足 但
  • 即使在双引号内或使用 PHP_EOL,PHP echo 也不打印换行符

    这是一张照片剪辑 我认为它很清楚 这真让我抓狂 我似乎无法让 php 在我的本地主机 使用 xampp 或在线 PHP 解释器上打印换行符 如果你想在 php 中使用 HTML 标签 试试这个 echo dkljaks aalksja kl
  • 致命错误 - 未找到“Mongo”类

    我正在尝试执行此操作 但我收到以下错误 致命错误 在 C wamp www 中找不到类 Mongo Info PHP 5 38 MongoDB mongodb win32 i386 2 0 2 MongoDB PHP 驱动程序 mongo
  • 从 $i 获取值,顺序被打乱

    for i 0 i lt count name i some output ommited td td
  • 无法访问 WordPress 中声明的全局变量

    我有以下代码 g value something print g value function get value global g value print g value print get value 当我在独立的 PHP 脚本中运行它
  • 使用正则表达式查找除一个字符串之外的所有字符串[重复]

    这个问题在这里已经有答案了 我想匹配除字符串之外的所有字符串 ABC 例子 A gt Match F gt Match AABC gt Match ABCC gt Match CBA gt Match ABC gt No match 我尝试
  • Yii2:无法将列值更新+1

    创建新记录时 我需要将列值更新 1 public function actionCreate model new CreateBookings if model gt load Yii app gt request gt post Yii

随机推荐

  • on(release) {...} 或 Button.on Release = function() {...} - actionscript 2 问题

    我对我正在创建的一些 Flash 横幅感到非常困惑 并将按钮制作成可打开网页的可点击对象 我在下面使用这段代码已经有一段时间了 它有效 on release getURL http www the dude co uk blank 我将此代
  • AS3 - 如何找到对象相对于舞台的位置?

    如果舞台上有一个矩形 如何找到其相对于舞台的左上角 x y 和右下角 x y 奇怪的是我怎么在谷歌上找不到这个 localToGlobal point of DisplayObject将点对象从显示对象的 局部 坐标转换为舞台 全局 坐标
  • 当向 Excel 提供来自 win32com 的数据时出现命名冲突 (_FilterDatabase)

    我想创建一个快速脚本 从标准化表单 word 文档 docx 中提取数据并将其传输到 Excel 工作表中 并附上一张进行一些计算的工作表 一切都运行得很好 除了一个例外 我希望能够过滤特定项目编号 用户首字母或其他数据点的结果 但是当我在
  • 泛型 的实际含义是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 List gt 在 java 泛型中意味着什么 https stackoverflow com questions 1844770 what does list mean in java generi
  • 如何获取公开共享文件/文件夹的链接

    我们可以使用共享文件 文件夹https developers google com drive v2 reference permissions insert https developers google com drive v2 ref
  • 批处理脚本移动带时间戳的文件

    所以基本上我有一个文件系统 C Test BaseLine 在BaseLine文件夹下有很多文件夹 可能是1个文件夹 也可能是15个文件夹 这些文件夹中都是图像文件 我想将这些文件夹中不包括 BaseLine 文件夹的所有图像复制到另一个位
  • GO:未知标志-trimpath

    这是我第一次接触GO hello go My first GOlang program package main import fmt func main fmt Printf Hello World n 我收到此错误 command li
  • 如何添加“活动”类以与 Angular 2 链接

    我有一页包含部分和固定菜单 当用户单击菜单项时 页面将滚动到相应的部分 对于滚动我使用https github com Nolanus ng2 page scroll https github com Nolanus ng2 page sc
  • 如何确定使用 Spring Security 访问 URL 需要哪些角色?

    我正在使用 Spring Security 来保护网络应用程序 URL 的安全性如下
  • Java中如何将Integer[]数组转换为int[]数组?

    有没有一种奇特的方法将 Integer 数组转换为 int 数组 我不想迭代每个元素 我正在寻找一种优雅而快速的方式来编写它 相反 我正在使用 scaleTests add Arrays stream data boxed toArray
  • 有效地选择随机数

    我有一个方法 它使用随机样本来近似计算 该方法被调用数百万次 因此选择随机数的过程是否高效非常重要 我不确定java有多快Random nextInt确实如此 但我的程序似乎并没有像我希望的那样受益 选择随机数时 我执行以下操作 以半伪代码
  • 锁定多个 std::mutex 的最佳方法是什么?

    注意 这个问题涉及C 11 C 17 或更高版本 中同一问题的答案可能已更改 详情 std lock guard 还是 std scoped lock https stackoverflow com questions 43019598 s
  • 如何根据 Django 管理中另一个选择标签的选项更改选择标签选项?

    我在 admin py 中有这个 class BrandAdmin admin ModelAdmin list display name category date form BrandAdminForm class Media js ow
  • 实体框架和表值参数

    我正在尝试调用存储过程实体框架它使用表值范围 但是当我尝试执行函数导入时 我不断收到一条警告消息 函数 InsertPerson 有一个参数 InsertPerson TVP 参数索引 0 具有当前的数据类型 表类型 目标 NET Fram
  • 两个数组之间的差异

    我有以下两个数组 我想要这两个数组之间的差异 也就是说 如何找到两个数组中都不存在的值 array1 Array 0 gt 64 1 gt 98 2 gt 112 3 gt 92 4 gt 92 5 gt 92 array2 Array 0
  • 可以在外部html中使用Extjs的脚本吗?

    我已使用以下方法将手动编写的脚本加载到 Extjs Ext Loader LoadScript http docs sencha com extjs 4 1 3 api Ext Loader method loadScript Ext Lo
  • Java PDF 查看器

    我正在使用 java 和 RCP 并且尝试在我的视图中使用 Acrobat 显示 pdf 文档 我不需要改变它们 我的这段代码有这个错误 知道如何解决这个问题吗 P s 同样的时间效果很好 PDFFile pdfFile pdfFile P
  • 如何释放不再使用的 UIImage 内存

    我正在尝试将一些较小的图像合并为一个较大的图像 该应用程序崩溃是因为内存不足 但我不知道如何在使用内存后释放内存 因此它会不断累积 直到应用程序崩溃 addImageToImage 和 resizeImage 例程似乎导致了崩溃 因为在不再
  • 如何为采用单个数组参数的构造函数调用 New-Object?

    在 PowerShell 中 我想使用New Object调用单参数 Net 构造函数new X509Certificate2 byte byteArray 问题是当我使用 powershell 中的字节数组执行此操作时 我得到 新对象 找
  • 确定字符串是否经过两次 Base64 编码

    有什么方法可以确定字符串是否经过两次 Base64 编码 例如 是否有我可以使用的正则表达式模式preg match去做这个 实际答案 不要使用正则表达式 使用解码你的字符串base64 decode http php net manual