0.2.0 |
|
---|---|
0.1.0 |
|
#5 in #phc
20KB
243 行
RustCrypto: B64编码
纯Rust实现的B64,它是PHC字符串格式(RFC 4648标准Base64编码的一个子集)。
不使用依赖于数据的分支或查找表,从而提供“尽力而为”的常数时间操作。
支持no_std
环境,并在核心API中避免堆分配(但还提供了可选的alloc
支持以方便使用)。
关于B64
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如果最后一个组不包含正好三个字节,则
- 组以一个或两个值为0x00的字节结束,然后按照上述方法处理。
- 得到的字符序列被截断为其前两个字符(如果组最初包含单个字节)或前三个字符(如果组最初包含两个字节)。
因此,B64编码的值产生一个字符串,其长度除以4的余数可以是0、2或3,但不能是1。请注意,具有正确长度的字符序列仍然可能是无效编码,如果它定义了最后一个不完整组中的某些非零尾部位;生产者必须将尾部位设置为0,而消费者可以选择忽略它们,或者拒绝此类无效编码。
许可证
在以下任一许可证下许可:
根据您的选择。
贡献
除非您明确说明,否则您根据Apache-2.0许可证定义的任何有意提交以包含在作品中的贡献,将按上述方式双重许可,不附加任何额外条款或条件。