确定base64url编码的字符串的长度

时间:2019-03-25 18:50:06

标签: hash encoding base64url

我正在尝试编写单元测试,以检查我是否正确地对字符串(实际上是PEM证书)进行了哈希和编码。

我正在做的是:

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

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

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

我不清楚的是“ base64url”编码的“ url”部分:因为它使字符串对于url安全,所以它可以进行任何形式的字符扩展(例如,urlencoding替换单个空格字符)加上%20(三个字符)。

1 个答案:

答案 0 :(得分:1)

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

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