MD5工具类

摘要算法

摘要算法,也称为哈希算法,散列算法,可以将任意一个长度的数据转化为定长的,不可逆的数字,计算结果几乎不同(几乎不用考虑重复的问题),摘要算法,主要用于对比信息源是否一致,因为信息源发生了变化,得到的摘要信息必然不同,通常用于签名校。

消息摘要算法的特点:

List item无论输入的消息有多长,计算出来的信息摘要长度总是不变的

信息摘要不是真正的随机,凡是用相同的算法,对相同的消息求两次摘要其结果必然相同

信息摘要函数是无陷门的单向函数,即只能进行正向的信息摘要,而无法从摘要中恢复任何的信息,甚至根本找不到与源信息相关的信息。

常见的摘要算法有:MD5,SHA-1,CRC等

MD5
MD5信息摘要算法,一种广泛使用的密码散列函数,可以产生128位(16字节)的散列值,用于确保信息传输完整一致性。
加密工具类

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


public class MD5Utils {

    public static String getPwd(String pwd) {
        try {
            // 创建加密对象
            MessageDigest digest = MessageDigest.getInstance("md5");

            // 调用加密对象的方法,加密的动作已经完成
            byte[] bs = digest.digest(pwd.getBytes());
            // 接下来,我们要对加密后的结果,进行优化,按照mysql的优化思路走
            // mysql的优化思路:
            // 第一步,将数据全部转换成正数:
            String hexString = "";
            for (byte b : bs) {
                // 第一步,将数据全部转换成正数:
                // 解释:为什么采用b&255
                /*
                 * b:它本来是一个byte类型的数据(1个字节) 255:是一个int类型的数据(4个字节)
                 * byte类型的数据与int类型的数据进行运算,会自动类型提升为int类型 eg: b: 1001 1100(原始数据)
                 * 运算时: b: 0000 0000 0000 0000 0000 0000 1001 1100 255: 0000
                 * 0000 0000 0000 0000 0000 1111 1111 结果:0000 0000 0000 0000
                 * 0000 0000 1001 1100 此时的temp是一个int类型的整数
                 */
                int temp = b & 255;
                // 第二步,将所有的数据转换成16进制的形式
                // 注意:转换的时候注意if正数>=0&&<16,那么如果使用Integer.toHexString(),可能会造成缺少位数
                // 因此,需要对temp进行判断
                if (temp < 16 && temp >= 0) {
                    // 手动补上一个“0”
                    hexString = hexString + "0" + Integer.toHexString(temp);
                } else {
                    hexString = hexString + Integer.toHexString(temp);
                }
            }
            return hexString;
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "";
    }


//    public static void main(String[] args) {
//        String pwd = MD5Utils.getPwd("234");
//        System.out.println(pwd);
//    }

}

如果在字符串中后面加入一些其他的字符,就称为加盐操作
String pwd = MD5Utils.getPwd(“234”+”0x123423“);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值