确定 base64url 编码字符串的长度

Determine the length of a base64url encoded string

我正在尝试编写一个单元测试来检查我是否正确地对字符串(实际上是 PEM 证书)进行散列和编码。

我正在做的是:

  1. 获取证书(PEM 格式)
  2. 将其转换为 DER
  3. 运行对其进行哈希函数得到哈希值(SHA-1 / SHA-256)
  4. Base64Url 编码哈希

SHA-256 哈希的值具有固定长度(256 位)。这可以用不同的方式表示(十六进制/二进制等),但在下面是相同的。我将值存储在 Java 字节数组中。

我的问题是:如果我尝试对这个散列字节数组值进行 base64url 编码,生成的编码字符串的长度是否始终相同?或者它会根据底层哈希中存在的值而变化吗?

我不清楚的是 "base64url" 编码的 "url" 部分:因为它使字符串对 url 安全,它是否进行任何类型的字符扩展(例如, urlencoding 将单个 space 字符替换为 %20,即三个字符)。

Base64Url 编码只是 Base64 编码,+ 和 / 切换为两个不同的字符,更适合放入 Uri。

由于 SHA-256 始终具有相同的固定长度,因此 base64 编码的 SHA-256 哈希也将具有相同的固定长度。每个 base64 数字是 6 位。由于 256/6 不是整数,您会得到一些填充字符 ('='),但字符串的长度始终相同。