base64编码长度参数

2024-02-04

我正在解码一个 Base64 字符串,修改它,然后用 Ruby 重新编码。当我重新编码时,问题是 ruby​​ 编码库在 60 个左右的字符后添加换行符。我怎样才能告诉它没有每行最大字符数限制?

val = "QmFzZTY0IGlzIGEgZ2VuZXJpYyB0ZXJtIGZvciBhIG51bWJlciBvZiBzaW1pbGFyIGVuY29kaW5nIHNjaGVtZXMgdGhhdCBlbmNvZGUgYmluYXJ5IGRhdGEgYnkgdHJlYXRpbmcgaXQgbnVtZXJpY2FsbHkgYW5kIHRyYW5zbGF0aW5nIGl0IGludG8gYSBiYXNlIDY0IHJlcHJlc2VudGF0aW9uLiBUaGUgQmFzZTY0IHRlcm0gb3JpZ2luYXRlcyBmcm9tIGEgc3BlY2lmaWMgTUlNRSBjb250ZW50IHRyYW5zZmVyIGVuY29kaW5nLg0KDQpCYXNlNjQgZW5jb2Rpbmcgc2NoZW1lcyBhcmUgY29tbW9ubHkgdXNlZCB3aGVuIHRoZXJlIGlzIGEgbmVlZCB0byBlbmNvZGUgYmluYXJ5IGRhdGEgdGhhdCBuZWVkcyBiZSBzdG9yZWQgYW5kIHRyYW5zZmVycmVkIG92ZXIgbWVkaWEgdGhhdCBhcmUgZGVzaWduZWQgdG8gZGVhbCB3aXRoIHRleHR1YWwgZGF0YS4gVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgZGF0YSByZW1haW5zIGludGFjdCB3aXRob3V0IG1vZGlmaWNhdGlvbiBkdXJpbmcgdHJhbnNwb3J0LiBCYXNlNjQgaXMgdXNlZCBjb21tb25seSBpbiBhIG51bWJlciBvZiBhcHBsaWNhdGlvbnMgaW5jbHVkaW5nIGVtYWlsIHZpYSBNSU1FLCBhbmQgc3RvcmluZyBjb21wbGV4IGRhdGEgaW4gWE1MLg=="

decoded_val = Base64.decode64(val)
encoded_val = Base64.encode64(val)

#=> QmFzZTY0IGlzIGEgZ2VuZXJpYyB0ZXJtIGZvciBhIG51bWJlciBvZiBzaW1p
#   bGFyIGVuY29kaW5nIHNjaGVtZXMgdGhhdCBlbmNvZGUgYmluYXJ5IGRhdGEg
#   YnkgdHJlYXRpbmcgaXQgbnVtZXJpY2FsbHkgYW5kIHRyYW5zbGF0aW5nIGl0
#   IGludG8gYSBiYXNlIDY0IHJlcHJlc2VudGF0aW9uLiBUaGUgQmFzZTY0IHRl
#   cm0gb3JpZ2luYXRlcyBmcm9tIGEgc3BlY2lmaWMgTUlNRSBjb250ZW50IHRy
#   YW5zZmVyIGVuY29kaW5nLg0KDQpCYXNlNjQgZW5jb2Rpbmcgc2NoZW1lcyBh
#   cmUgY29tbW9ubHkgdXNlZCB3aGVuIHRoZXJlIGlzIGEgbmVlZCB0byBlbmNv
#   ZGUgYmluYXJ5IGRhdGEgdGhhdCBuZWVkcyBiZSBzdG9yZWQgYW5kIHRyYW5z
#   ZmVycmVkIG92ZXIgbWVkaWEgdGhhdCBhcmUgZGVzaWduZWQgdG8gZGVhbCB3
#   aXRoIHRleHR1YWwgZGF0YS4gVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUg
#   ZGF0YSByZW1haW5zIGludGFjdCB3aXRob3V0IG1vZGlmaWNhdGlvbiBkdXJp
#   bmcgdHJhbnNwb3J0LiBCYXNlNjQgaXMgdXNlZCBjb21tb25seSBpbiBhIG51
#   bWJlciBvZiBhcHBsaWNhdGlvbnMgaW5jbHVkaW5nIGVtYWlsIHZpYSBNSU1F
#   LCBhbmQgc3RvcmluZyBjb21wbGV4IGRhdGEgaW4gWE1MLg==

RFC 4648:Base16、Base32 和 Base64 数据编码 https://www.rfc-editor.org/rfc/rfc4648#section-3.3有这样说:

3.3.编码数据中非字母字符的解释
[...]
如果编码数据包含,实现必须拒绝 解释基本编码时基本字母表之外的字符 数据,除非规范明确引用本文档 另有说明。此类规范可能会声明为 MIME 是的,基本编码字母表之外的字符应该 在解释数据时简单地被忽略(“在你所做的事情上保持自由”) 接受”)。请注意,这意味着任何相邻的回车符/ 换行 (CRLF) 字符构成“非字母字符”并且 被忽略。

因此,换行符很好,几乎所有内容都会忽略它们,即使它们没有严格遵守 RFC 4648。

另外,精美手册 http://ruby-doc.org/stdlib-1.9.3/libdoc/base64/rdoc/Base64.html#method-i-decode64有这样说:

编码64(bin)

返回 Base64 编码版本bin。此方法符合 RFC 2045。每 60 个编码字符添加换行符 [原文如此]。

因此 60 个字符的行长度是有意且指定的。如果你想要严格的 RFC 4648 Base64 (即没有换行符),那么有strict_encode64 http://ruby-doc.org/stdlib-1.9.3/libdoc/base64/rdoc/Base64.html#method-i-strict_encode64:

strict_encode64(bin)

返回 Base64 编码版本bin。此方法符合 RFC 4648。不添加换行符。

所以你可以说Base64.strict_encode64(val)以获得您正在寻找的输出。

作为参考,这里是RFC 2045 的相关部分 https://www.rfc-editor.org/rfc/rfc2045#section-6.8:

6.8。 Base64 内容传输编码
[...]
编码的输出流必须以行数表示 每个超过 76 个字符。所有换行符或其他字符都不是 解码软件必须忽略表 1 中的结果。

因此 60 个字符的行长度有些任意,但符合 RFC 2045,因为60 < 76.

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

base64编码长度参数 的相关文章

随机推荐

  • C++ 中的自定义事件?

    是否可以在 C 中创建自定义事件 例如 假设我有变量 X 和变量 Y 每当 X 发生变化时 我想执行一个将 Y 设置为 3X 的函数 有没有办法创建这样的触发器 事件 触发器在某些数据库中很常见 这基本上是观察者模式的一个实例 正如其他人提
  • Pandas groupby 和多索引

    pandas 是否有机会通过 MultiIndex 对数据进行分组 我的意思是不仅传递给 groupby 函数键 还传递键和值来预定义数据帧列 a np array foo foo foo bar bar foo foo dtype obj
  • 未找到数据源名称且未指定默认驱动程序

    我被要求将使用 MVP 模式的 WinForms 应用程序移植到网页上 除其他外 该应用程序将 CSV 文件上传到数据表 然后执行一些工作 CSV文件上传到服务器OK然后用下面的代码读取 string connectionString Dr
  • 在函数作用域末尾执行代码的简单方法[重复]

    这个问题在这里已经有答案了 在测试代 码中 我偶尔想设置 模拟一些全局变量 在测试 范围结束时我想恢复这些变量 例如 BOOST AUTO TEST CASE HttpClientCsrf std string csrfSave Http
  • 反序列化 PHP 会话数据

    我正在使用 CodeIgniter 3 x 和数据库会话驱动程序 我想访问data列那BLOB类型 这是我的 blob 数据 ci last regenerate i 1435420891 identity s 13 email prote
  • 匿名共享内存?

    是否有一种 POSIX y 方法来分配不与特定文件名绑定的共享内存 IE 仅通过 UNIX 域套接字传递 SCM RIGHTS 消息才能在进程之间共享内存 None
  • Asp.net 单元测试中缺少对 System.Web.Mvc 的引用?

    我最近为我的 Asp NET MVC 应用程序做了一些单元测试 或者我尝试这样做 它一直告诉我 类型 System Web Mvc Controller 是在未引用的程序集中定义的 您必须添加引用程序集 System Web Mvc 版本
  • 在 AJAX 请求期间显示微调框?

    展示旋转器的最佳方式是什么 我准备了一个 div id spinner 它在加载过程中应该是可见的 你使用 jQuery 吗 如果是这样你可以使用 ajaxStart 和 ajaxStop http docs jquery com Ajax
  • 迭代 String.prototype

    我知道for in循环可以帮助迭代对象 原型和集合的属性 事实是 我需要迭代String prototype 虽然console log String prototype 当我这样做时显示完整的原型 for var prop in Stri
  • 如何在 ASP.Net 应用程序中使用 HTTPS

    我想在 ASP NET Web 应用程序中使用 HTTPS 但仅限于 Login aspx 页面 如何才能做到这一点 首先获取或创建证书 获取 SecureWebPageModule 模块http www codeproject com A
  • Fluent nhibernate:如何映射具有类型为接口的属性的实体?

    我有一个像这样的实体 public class Employee public int ID get set public IAccountManager AccountManager get set 我还为 DefaultAccountM
  • WP8.1 HttpClient Stream 仅获取 65536 字节数据

    我正在尝试在 Windows 运行时为 win8 1 和 wp8 1 的 MediaElement 编写一个实时 flv 流解复用器 我已经完成了解复用代码 flv 文件可以正确解复用为 h264 和 aac 标签数据 当我尝试播放网络文件
  • Xcode 斯威夫特。如何在基于视图的 NSTableView 中以编程方式选择单元格

    我可以单击一个单元格并编辑其内容 但是 可以通过编程方式选择单元格 而不是单击 选择单元格 基本上为单元格焦点提供准备编辑的机会 StackOverflow 上有人问了关于 UITableView 的同样问题 给出的答案是 let inde
  • 如何从 Python 执行程序? os.system 由于路径中的空格而失败[重复]

    这个问题在这里已经有答案了 我有一个Python脚本需要执行外部程序 但由于某种原因失败了 如果我有以下脚本 import os os system C Temp a b c Notepad exe raw input 然后它失败并出现以下
  • 如何使用 GeoTools 创建具有纬度、经度和半径的圆?

    现在我有 Polygon circle geometryBuilder circle myLong myLat radiusInMeters 10 它创建 纬度 28 456306 长 16 292034 半径 500 一个具有巨大纬度和经
  • JavaScript 中用于格式化数字的正则表达式

    我需要使用 JavaScript 在网页上显示格式化的数字 我想对其进行格式化 以便在正确的位置有逗号 我该如何使用正则表达式来做到这一点 我已经得到这样的东西 myString myString replace d 3 g 1 然后意识到
  • 将 select 语句包含在事务中有何意义?

    将 select 语句包含在事务中有何意义 我认为 select 语句只是从数据库中 获取 数据 它们没有机会回滚某些内容 因为您无法更改数据 那么 这是否意味着我们永远不需要在事务中放置 select 语句 我对吗 Thanks 你是对的
  • 2 个 TextView,左侧带省略号,右侧带 nowrap,单行

    第一次在这个论坛发帖 希望一切顺利 我正在为我所在城市的公共交通开发 Android 应用程序 这是我所拥有的 http s28 postimg org i8cdifwgd actual png short destination next
  • 读取嵌入双引号和逗号的 CSV 文件

    我正在尝试使用 data table 包中的 fread 函数读取脏 CSV 文件 但在字符串值中嵌入双引号和逗号时遇到问题 即引用字段中存在未转义的双引号 以下示例数据说明了我的问题 它由 3 行 行和 6 列组成 第一行包含列名称 SA
  • base64编码长度参数

    我正在解码一个 Base64 字符串 修改它 然后用 Ruby 重新编码 当我重新编码时 问题是 ruby 编码库在 60 个左右的字符后添加换行符 我怎样才能告诉它没有每行最大字符数限制 val QmFzZTY0IGlzIGEgZ2VuZ