问题标签 [base64]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
165721 浏览

regex - RegEx 解析或验证 Base64 数据

是否可以使用正则表达式来验证或清理 Base64 数据?这是一个简单的问题,但驱动这个问题的因素是使它变得困难的因素。

我有一个不能完全依赖输入数据来遵循 RFC 规范的 Base64 解码器。因此,我面临的问题可能是 Base64 数据可能无法分解为 78 的问题(我认为是 78,我必须仔细检查 RFC,所以如果确切数字错误,请不要叮我)字符行,或者行不能以 CRLF 结尾;因为它可能只有一个 CR 或 LF,或者两者都没有。

所以,我在解析这种格式的 Base64 数据时度过了一段地狱般的时光。因此,以下示例无法可靠解码。为简洁起见,我将只显示部分 MIME 标头。

好的,所以解析没有问题,这正是我们所期望的结果。在 99% 的情况下,使用任何代码至少验证缓冲区中的每个字符都是有效的 base64 字符,都可以完美运行。但是,下一个示例将扳手投入其中。

这是我在一些病毒和其他试图利用某些邮件阅读器希望不惜一切代价解析 mime 的东西中看到的 Base64 编码版本,而不是那些严格按照书本,或者更确切地说是 RFC 的东西;如果你愿意的话。

我的 Base64 解码器将第二个示例解码为以下数据流。请记住,原始流都是 ASCII 数据!

任何人有一个很好的方法来一次解决这两个问题?我不确定这是否可能,除了对应用了不同规则的数据进行两次转换并比较结果之外。但是,如果您采用这种方法,您信任哪个输出?似乎 ASCII 启发式方法是最好的解决方案,但是对于像病毒扫描程序这样复杂的东西,这段代码实际上参与其中,会增加多少代码、执行时间和复杂性?您将如何训练启发式引擎以了解什么是可接受的 Base64,什么不是?


更新:

对于这个问题继续获得的视图数量,我决定发布我在 C# 应用程序中使用了 3 年的简单正则表达式,其中包含数十万个事务。老实说,我最喜欢Gumbo给出的答案,这就是我选择它作为选定答案的原因。但是对于任何使用 C# 并且正在寻找一种非常快速的方法来至少检测字符串或字节 [] 是否包含有效的 Base64 数据的人,我发现以下内容对我来说非常有效。

是的,这只是针对 Base64 数据的字符串,而不是格式正确的RFC1341消息。因此,如果您正在处理这种类型的数据,请在尝试使用上述 RegEx 之前考虑到这一点。如果您出于其他目的(URL、文件名、XML 编码等)处理 Base16、Base32、Radix 甚至 Base64,那么强烈建议您阅读Gumbo在他的回答中提到的RFC4648,因为您需要做好在尝试使用此问题/答案集中的建议之前,请了解实现使用的字符集和终止符。

0 投票
2 回答
64438 浏览

c# - 在 C# 中 Base64 编码 PDF?

有人可以提供一些关于如何做到这一点的信息吗?我可以对常规文本或字节数组执行此操作,但不确定如何处理 pdf。我先将pdf填充到字节数组中吗?

0 投票
6 回答
103065 浏览

encoding - VBScript中的Base64编码字符串

我有一个 Web 服务加载驱动程序,它是一个 Windows 脚本文件 (WSF),其中包括一些 VBScript 和 JavaScript 文件。我的 Web 服务要求传入的消息是 base64 编码的。我目前有一个 VBScript 函数可以执行此操作,但效率非常低(内存密集型,主要是由于 VBScripts 糟糕的字符串连接)

[在旁边; 是的,我看过Jeff 的最新博文。连接发生在一个循环中,跨越大小为 1,000 到 10,000 字节的消息。]

我尝试过使用一些自定义字符串连接例程;一个使用数组,一个使用 ADODB.Stream。这些有一点帮助,但我认为如果我有其他方式来编码消息而不是通过我自己的 VBS 函数,它会更有帮助。

是否有其他方式对我的消息进行编码,最好使用本机 Windows 方法?

0 投票
3 回答
22741 浏览

xml - 在 XML 中存储 base64 数据?

如何在 XML 中存储 base64 字符串?

您是否使用 CDATA 在 XML 中存储 base64 字符串?它允许在字符串中使用 < > 会有所帮助吗?

如果某些字符与 XML 冲突,base64 是否可配置?

0 投票
4 回答
12950 浏览

xml - 使用 CDATA 存储原始二进制流?

我想知道您是否可以直接将双字节二进制流存储到 XML 文件中,使用 CDATA 或将其注释掉,而不是将二进制文件保存为 Base64的开销?

0 投票
9 回答
35572 浏览

apache-flex - Flex 3 - 如何支持 HTTP Authentication URLRequest?

我有一个使用 URLRequest 将文件上传到服务器的 Flex 文件上传脚本。我想添加对 http 身份验证(服务器上受密码保护的目录)的支持,但我不知道如何实现这一点 - 我假设我需要以某种方式扩展类,但我有点迷失了。

我尝试修改以下内容(用 URLRequest 替换 HTTPService),但这没有用。

我应该指出,我对 ActionScript / Flex 并不了解,尽管我已经成功地修改了上传脚本。

[编辑] - 这是我的进度更新,基于下面的答案,虽然我仍然无法让它工作:

谢谢您的帮助。我试图实现你的代码,但我没有任何运气。

我在处理经过 HTTP 身份验证的位置时遇到的一般行为是,使用 IE7 一切都很好,但在 Firefox 中,当我尝试将文件上传到服务器时,它会显示 HTTP 身份验证提示 - 即使给出正确的详细信息,也会停止上传过程。

我相信 IE7 正常的原因是浏览器和 Flash 组件共享的会话/身份验证信息 - 但是,在 Firefox 中情况并非如此,我遇到了上述行为。

这是我更新的上传功能,包含您的更改:

如上所述,无论是否修改我的功能,我似乎都遇到了相同的结果。

我还可以问一下 crossdomain.xml 应该放在哪里 - 因为我目前没有,并且不确定将它放在哪里。

0 投票
10 回答
55949 浏览

php - Base 64 编码与加载图像文件

所以我正在用 php 做一些事情,我必须从 sql 数据库中获取我的图像,它们将以 base64 编码。显示这些图像的速度至关重要,因此我试图弄清楚将数据库数据转换为图像文件然后将其加载到浏览器中是否会更快,或者只是回显原始 base64 数据并使用:

FireFox 和其他 Gecko 浏览器均支持该功能。

所以回顾一下,传输实际图像文件或base64代码会更快吗?使用ajax加载图像时需要更少的http请求吗?

图像总共不超过 100 像素。

0 投票
7 回答
22515 浏览

database - 将图像存储在数据库中的最佳格式是什么?

将图像存储在数据库中的最佳格式是什么,例如二进制、base64 等,以获得最佳速度/大小。

0 投票
4 回答
6365 浏览

asp.net - 在 Ruby 中重新实现 ASP.NET 成员资格和用户密码哈希

我有一个庞大的用户数据库(约 200,000),我正在将其从 ASP.NET 应用程序转移到 Ruby on Rails 应用程序。我真的不想要求每个用户重置他们的密码,所以我试图在 Ruby 中重新实现 C# 密码散列函数。

旧功能是这样的:

一个示例哈希密码和盐是(并且使用的密码是“密码”):

散列密码:“weEWx4rhyPtd3kec7usysxf7kpk=”盐:“1ptFxHq7ALe7yXIQDdzQ9Q==”密码:“密码”

现在使用以下 Ruby 代码:

我没有得到正确的密码哈希(我得到的是“+BsdIOBN/Vh2U7qWG4e+O13h3iQ=”而不是“weEWx4rhyPtd3kec7usysxf7kpk=”)。谁能看到问题可能是什么?

非常感谢

阿尔丰

0 投票
15 回答
33522 浏览

python - 如何将整数转换为 Python 中最短的 url 安全字符串?

我想要在 URL 中表示整数的最短方法。例如,可以使用十六进制将 11234 缩短为“2be2”。由于 base64 使用的是 64 字符编码,因此应该可以使用比十六进制更少的字符来表示 base64 中的整数。问题是我无法找出使用 Python 将整数转换为 base64(然后再返回)的最简洁方法。

base64 模块具有处理字节串的方法 - 所以也许一种解决方案是将整数转换为其二进制表示形式作为 Python 字符串......但我也不知道该怎么做。