Jos*_*lds 4 java security cryptography
好奇的:
很多人会使用该[Number].toString(32)方法来执行诸如生成会话 ID 之类的事情,例如:
public class SessionID{
private static SecureRandom ran = new SecureRandom();
public static String next() {
return new BigInteger(130, ran).toString(32);
}
}
Run Code Online (Sandbox Code Playgroud)
我还看到它用于将散列密码字节转换为字符串格式。但为什么不使用.toString(36)?Base 32 不包括 z、y、x 或 w,那么使用它的原因是什么?(猜测与 32 = 2^5 有关,但我希望得到更好的答案。)
小智 5
正如您所提到的,32 = 2^5,因此每个字符将恰好代表 5 位。由于 128 位是强安全性的首选,26 个基数 32 数字 (32^26) 正好等于 2^130,因此每个字符将代表 5 位,并且 130 位可以均匀地划分为字符,您可以挤压几个额外的位,没有任何额外的字符。如果您改用 base 36,则每个字符需要 6 位。您可以将 129 位放入 25 个字符,但会浪费一些空间。
| 归档时间: |
|
| 查看次数: |
2153 次 |
| 最近记录: |