由于hex加密时0不被解析。即0x0001和0x1在表现上都是1只是占用内存大小不同。而如果数字相同自动0x01和0x1加密出来是一样的,所以0x01无论前面有几个0都会去掉。
平常使用MD5加密时,自己封装处理时,常见有2个问题:
1、转换为字符串时,高位的0被舍去;
2、出现负数时会有多个连续的F;
这是因为MessageDigest返回的结果是无符号数的byte数组,所以一个byte表示2位的十六进制数时,高位可能为0,而且在JAVA中byte默认是按有符号数的来读取的,转换时会出现负数。
在BigInteger的构造方法中:有一个这个方法stripLeadingZeroBytes
点进去发现里面有一句很明显的注释:
会从第一个非0的字节开始,这也就是原因,如果第一个是0,那么在这个方法中是会默认去除的