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

Hash 确定base64url编码字符串的长度,hash,encoding,base64url,Hash,Encoding,Base64url,我正在尝试编写一个单元测试,以检查是否正确地对字符串(实际上是PEM证书)进行哈希和编码 我正在做的是: 获取证书(PEM格式) 将其转换为DER 对其运行哈希函数以获取哈希值(SHA-1/SHA-256) Base64Url对哈希进行编码 SHA-256散列的值具有恒定长度(256位)。这可以用不同的方式表示(十六进制/二进制等),但下面是相同的。我将值存储在Java字节数组中 我的问题是:如果我尝试对这个散列字节数组值进行base64url编码,那么得到的编码字符串的长度是否总是相同的?或者

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

我正在做的是:

  • 获取证书(PEM格式)
  • 将其转换为DER
  • 对其运行哈希函数以获取哈希值(SHA-1/SHA-256)
  • Base64Url对哈希进行编码
  • SHA-256散列的值具有恒定长度(256位)。这可以用不同的方式表示(十六进制/二进制等),但下面是相同的。我将值存储在Java字节数组中

    我的问题是:如果我尝试对这个散列字节数组值进行base64url编码,那么得到的编码字符串的长度是否总是相同的?或者它会根据基础散列中存在的值而变化吗


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

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


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

    谢谢Broam。Base64Url编码规范: