MD5加密及在Android中的使用

1. MD5简介

MD5消息摘要算法(MD5 Message-Digest Algorithm),是一种常用的信息摘要算法,用于将一个文件或者一大段文本转化为16字节的字符串,生成的字符串具有以下特点:

  • 不可逆
    因为不论文件/文本大小,均会转换为固定长度字符串,转换过程中丢失了大量信息,因此几乎不可能根据MD5字符串反推出原始文本。
  • 高度离散
    只要对原文本/文件作出修改(添加、删除、修改),哪怕是一个字符,都会引起生成MD5字符串的巨大变化
  • 弱碰撞性
    因为生成字符串的高度离散性,导致构造一对文本内容不同,但MD5值相同的数据十分困难。
  • List item

MD5常用使用场景有:

  • 存储密码
    数据库中存储的一般都是用户密码的MD5值,防止因服务器数据库被盗库后用户密码外泄。
  • 作为文件指纹
    利用MD5的高度离散性,将MD5值作为文件指纹判断两个文件是否相同,如从网站下载软件时,常常会标出该文件的MD5值,用于检测下载文件完整性

2. 在Android中使用MD5

JDK中已集成MD5支持,使用示例代码如下:

  • 常用的32位MD5加密
	/**
     * 32位MD5加密
     * @param content -- 待加密内容
     * @return
     */
    public String md5Decode32(String content) {
        byte[] hash;
        try {
            hash = MessageDigest.getInstance("MD5").digest(content.getBytes("UTF-8"));
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("NoSuchAlgorithmException",e);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("UnsupportedEncodingException", e);
        }
        //对生成的16字节数组进行补零操作
        StringBuilder hex = new StringBuilder(hash.length * 2);
        for (byte b : hash) {
            if ((b & 0xFF) < 0x10){
                hex.append("0");
            }
            hex.append(Integer.toHexString(b & 0xFF));
        }
        return hex.toString();
    }
  • 16位MD5加密
	/**
     * 16位MD5加密
     * 实际是截取的32位加密结果的中间部分(8-24位)
     * @param content
     * @return
     */
    public String md5Decode16(String content) {
        return md5Decode(content).substring(8, 24);
    }

16位MD5加密实际是截取的32位加密结果的中间部分(8-24位)
以"123456"为例,调用结果如下:
MD5加密结果.png
md5在线解密破解中验证:
MD5在线加密结果.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值