#base64 #phc #string-format #b64 #table #branch #lookup-tables

已删除 b64ct

使用纯Rust实现的B64,它是PHC字符串格式(RFC 4648标准Base64编码的一个子集)。在不使用依赖于数据的分支或查找表的情况下实现,提供“尽力而为”的常数时间操作。

0.2.0 2021年1月20日
0.1.0 2021年1月12日

#5 in #phc

Apache-2.0 OR MIT

20KB
243

RustCrypto: B64编码

crate Docs Apache2/MIT licensed Rust Version Project Chat Build Status

纯Rust实现的B64,它是PHC字符串格式(RFC 4648标准Base64编码的一个子集)。

不使用依赖于数据的分支或查找表,从而提供“尽力而为”的常数时间操作。

支持no_std环境,并在核心API中避免堆分配(但还提供了可选的alloc支持以方便使用)。

文档

关于B64

以下关于B64的描述摘自PHC字符串格式规范

B64编码是标准Base64编码(RFC 4648第4节)的编码,但省略了填充的等号(=)符号,不允许使用额外的字符(空白字符)

  • 输入被分成连续的字节组。每个组(除最后一个组外)恰好包含三个字节。

  • 对于字节组b0、b1和b2,计算以下值

      x = (b0 << 16) + (b1 << 8) + b2
    

然后将x分成四个6位值y0、y1、y2和y3,使得

    x = (y0 << 18) + (y1 << 12) + (y2 << 6) + y3
  • 每个6位值按顺序编码到[[A-Za-z0-9+/]字母表中的一个字符

    • A..Z = 0 to 25
    • a..z = 26 to 51
    • 0..9 = 52 to 61
    • + = 62
    • / = 63
  • 如果最后一个组不包含正好三个字节,则

    1. 组以一个或两个值为0x00的字节结束,然后按照上述方法处理。
    2. 得到的字符序列被截断为其前两个字符(如果组最初包含单个字节)或前三个字符(如果组最初包含两个字节)。

因此,B64编码的值产生一个字符串,其长度除以4的余数可以是0、2或3,但不能是1。请注意,具有正确长度的字符序列仍然可能是无效编码,如果它定义了最后一个不完整组中的某些非零尾部位;生产者必须将尾部位设置为0,而消费者可以选择忽略它们,或者拒绝此类无效编码。

许可证

在以下任一许可证下许可:

根据您的选择。

贡献

除非您明确说明,否则您根据Apache-2.0许可证定义的任何有意提交以包含在作品中的贡献,将按上述方式双重许可,不附加任何额外条款或条件。

无运行时依赖项

功能