0

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

我正在做的是:

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

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

我的问题是:如果我尝试对这个散列字节数组值进行 base64url 编码,生成的编码字符串的长度是否总是相同的?还是会根据底层哈希中存在的值而有所不同?

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

4

1 回答 1

1

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

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

于 2019-03-25T18:56:49.403 回答