记一次加密算法MD5转32-Hash

通过MessageDigest可以获取到16个字节数组:

MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] digest = md5.digest(str);

接着遍历字节数组,将每个字节进行16进制转换


char hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'a', 'b', 'c', 'd', 'e', 'f' };
for (int x = 0; x < digest.length; x++) {
    sbr.append(hex[digest[x] >> 4 & 0x0f]) // 取高4位的10进制值 (代表16进制)
      .append(hex[digest[x] & 0x0f); // 取低4位
}
如:byte i = 44;

转2进制是 0010 1100

0010 1100 >> 4 = 0010 // 取高4位
那么 0000 0010 & 0000 1111 = 0000 0010 // 转16进制 - 2

0010 1100 & 0000 1111 = 0000 1100 // 直接 & 就是低4位的,因为0xf的高4位是0,那么相 & 得到的结果也是 0。 最后转16进制 - c (10进制表示数字12)

最后,结果就是 0x2c
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值