java md5签名首位为0时被忽略

由于hex加密时0不被解析。即0x0001和0x1在表现上都是1只是占用内存大小不同。而如果数字相同自动0x01和0x1加密出来是一样的,所以0x01无论前面有几个0都会去掉。

平常使用MD5加密时,自己封装处理时,常见有2个问题:

1、转换为字符串时,高位的0被舍去;

2、出现负数时会有多个连续的F;

这是因为MessageDigest返回的结果是无符号数的byte数组,所以一个byte表示2位的十六进制数时,高位可能为0,而且在JAVA中byte默认是按有符号数的来读取的,转换时会出现负数。

在BigInteger的构造方法中:有一个这个方法stripLeadingZeroBytes

java md5签名首位为0时被忽略_第1张图片

 

点进去发现里面有一句很明显的注释:

java md5签名首位为0时被忽略_第2张图片

 

 

会从第一个非0的字节开始,这也就是原因,如果第一个是0,那么在这个方法中是会默认去除的

你可能感兴趣的:(Java和Jvm,java)