gpt4 book ai didi

java - Base64 编码的 512 位数字签名的最终字符的范围是多少?

转载 作者:行者123 更新时间:2023-12-01 13:36:35 25 4
gpt4 key购买 nike

我通过各种堆栈问答发现,Base64 编码的 256 位数字将有一个 = 用于填充,并且仅以 AEIMQUYcgkosw048 之一结束。

由于位商的原因,我相当有信心 Base64 编码的 512 位数字将有两个 == 填充。

对于 Base64 编码的 512 位数字,最终字符的范围是多少?位商的模数相同,是否意味着 256 位编码和 512 位编码的最终字符范围相同?

这是为了节省空间和重新调整可读的 Ed25519 签名。

<小时/>

具体来说,我使用 org.apache.commons.codec.binary.Base64 将 Java byte[64] 转换为 StringsencodeBase64 .

最佳答案

我在这里假设所讨论的256位512位数字分别使用32或64字节进行编码(即不删除前导零,没有额外的位来防止签名/未签名问题,没有 ASN.1 BER 编码 header ,...)。

Base64 对每个字节三元组使用 4 个字符,每个字符代表 6 位数据:

        byte #1    |    byte #2    |    byte #3
bit 7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0

变成了

bit 5 4 3 2 1 0|5 4 3 2 1 0|5 4 3 2 1 0|5 4 3 2 1 0
char #1 | char #2 | char #3 | char #4

通过表格指定哪个字符用于哪个 6 元组位,例如参见Wikipedia article .

因此,在 256 位数字的情况下,必须编码 32 个字节,即使用 11 个字符四元组,其中最后一个仅编码 2 个字节,而不是最多 3 个字节,即仅编码16 位数据。因此,最后一个字符(没有数据)是 =,而倒数第二个字符(只有前 4 位数据)只能是代表 6 的一个字符。 - 最低两位为 0 的位元组,即您枚举的字符。

如果是 512 位数字,则必须编码 64 个字节,即使用 22 个字符四元组,其中最后一个仅编码 1 个字节,而不是最多 3 个字节,即仅编码 8 个字节位数据。因此,最后两个字符(没有数据)都是 =,第二个字符(只有前 2 位数据)只能是代表 6- 的一个字符。位元组中四个最低位为 0,即字符 AQgw

如上所述,我对数字的编码做出了某些假设......

关于java - Base64 编码的 512 位数字签名的最终字符的范围是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21225888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com