MD5加密技术

什么是MD5?
MD5是一种加密算法
它可以将字符串、文件、压缩包等转换成一个固定长度为32位的字符串

MD5的长度
32位字符串

MD5是唯一的吗?
不唯一,一个32位字符串无法加密无数的事物

MD5能被破解吗?
自称可以破解,但是需要至少一百多年。其实有其他破解方法!例如穷举法,彩虹表,碰撞

MD5的作用
既然是加密技术,那肯定是为了让一些东西不能随便让人看到,比如保存到数据库的密码,也是MD5用的比较多的。还有文件完整性的校验,文件的上传等。

Java实现MD5的加密

public final class Md5Util {
    private Md5Util(){}
    /**
     * 将明文密码转成MD5密码 
     */
    public static String encodeByMd5(String password) throws Exception{
        //Java中MessageDigest类封装了MD5和SHA算法
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        //调用MD5算法,即返回16个byte类型的值
        byte[] byteArray = md5.digest(password.getBytes());
        //注意:MessageDigest只能将String转成byte[],接下来的事情,由我们程序员来完成
        return byteArrayToHexString(byteArray);
    }
    /**
     * 将byte[]转在16进制字符串 
     */
    private static String byteArrayToHexString(byte[] byteArray) {
        StringBuffer sb = new StringBuffer();
        //遍历
        for(byte b : byteArray){//16次
            //取出每一个byte类型,进行转换
            String hex = byteToHexString(b);
            //将转换后的值放入StringBuffer中
            sb.append(hex);
        }
        return sb.toString();
    }
    /**
     * 将byte转在16进制字符串 
     */
    private static String byteToHexString(byte b) {//-31转成e1,10转成0a,。。。
        //将byte类型赋给int类型
        int n = b;
        //如果n是负数
        if(n < 0){
            //转正数
            //-31的16进制数,等价于求225的16进制数 
            n = 256 + n;
        }
        //商(14),数组的下标
        int d1 = n / 16;
        //余(1),数组的下标
        int d2 = n % 16;
        //通过下标取值
        return hex[d1] + hex[d2];
    }
    private static String[] hex = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};

测试

public static void main(String[] args) throws Exception{
        String password = "123456";
        String passwordMD5 = Md5Util.encodeByMd5(password);
        System.out.println(password);
        System.out.println(passwordMD5);
    }

————————————————
版权声明:本文为CSDN博主「AS761379193」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/AS761379193/article/details/82693590

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值