Android MD5加密

Android MD5加密概述在网络中传输明文是一件非常危险的事情,所以通常将密码加密后传至服务器,由服务器保存密文在登录判定时只需比较密文是否相同即可。MD5加密是一种常用的加密算法,全称为“Message-DigestAlgorithm5”,即消息摘要算法,由MD2、MD3、MD4演变过来的,是一种单向加密算法,是一种不可逆的加密方式MD5优点:压缩性:任意长度的数据,算出的MD5值长度都是固定的。容易计算:从原数…

大家好,又见面了,我是你们的朋友全栈君。

概述

在网络中传输明文是一件非常危险的事情,所以通常将密码加密后传至服务器,由服务器保存密文在登录判定时只需比较密文是否相同即可。

MD5加密是一种常用的加密算法,全称为“Message-Digest Algorithm 5”,即消息摘要算法,由MD2、MD3、MD4演变过来的,是一种单向加密算法,是一种不可逆的加密方式

MD5优点:

  • 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
  • 容易计算:从原数据计算出MD5值很容易。
  • 抗修改性:对原数据进行任何改动,所得到的MD5值都有很大区别。
  • 强抗碰撞:已知原数据和其MD5值,想找到一个相同MD5值得数据是非常困难的。

Android中MD5加密算法实现

1、计算字符串MD5值

    @NonNull
    public static String md5(String string) {
        if (TextUtils.isEmpty(string)) {
            return "";
        }
        MessageDigest md5 = null;
        try {
            md5 = MessageDigest.getInstance("MD5");
            byte[] bytes = md5.digest(string.getBytes());
            StringBuilder result = new StringBuilder();
            for (byte b : bytes) {
                String temp = Integer.toHexString(b & 0xff);
                if (temp.length() == 1) {
                    temp = "0" + temp;
                }
                result.append(temp);
            }
            return result.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }

2、计算文件的MD5值

    @NonNull
    public static String md5(File file) {
        if (file == null || !file.isFile() || !file.exists()) {
            return "";
        }
        FileInputStream in = null;
        String result = "";
        byte buffer[] = new byte[8192];
        int len;
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            in = new FileInputStream(file);
            while ((len = in.read(buffer)) != -1) {
                md5.update(buffer, 0, len);
            }
            byte[] bytes = md5.digest();

            for (byte b : bytes) {
                String temp = Integer.toHexString(b & 0xff);
                if (temp.length() == 1) {
                    temp = "0" + temp;
                }
                result += temp;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(null!=in){
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }

MD5加密安全性

虽然MD5加密本身是不可逆的,但并不是不可破译的,常见激活成功教程机制为穷举法,即为俗话说的跑字典,一些常见的密码很容易在大型数据库中匹配到相同的MD5值,所以我们要想办法增加加密安全性。

1、对字符串多次MD5加密

    @NonNull
    public static String md5(String string, int times) {
        if (TextUtils.isEmpty(string)) {
            return "";
        }
        String md5 = md5(string);
        for (int i = 0; i < times - 1; i++) {
            md5 = md5(md5);
        }
        return md5(md5);
    }

2、MD5加盐

加盐就是使用一个额外的盐值与原字符串一起加密,通常盐值可以使用用户名、string明文的hascode或是随机生成的字符串。

    @NonNull
    public static String md5(String string, String slat) {
        if (TextUtils.isEmpty(string)) {
            return "";
        }
        MessageDigest md5 = null;
        try {
            md5 = MessageDigest.getInstance("MD5");
            byte[] bytes = md5.digest((string + slat).getBytes());
            StringBuilder result = new StringBuilder();
            for (byte b : bytes) {
                String temp = Integer.toHexString(b & 0xff);
                if (temp.length() == 1) {
                    temp = "0" + temp;
                }
                result.append(temp);
            }
            return result.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157530.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WiFi(6)和5G的区别及比对[通俗易懂]

    WiFi(6)和5G的区别及比对[通俗易懂]5G是蜂窝数字移动通信技术,既可用于广域高速移动通信,又可用于室内无线上网,具有传输速率高、时延小、并发能力强等优点,但系统复杂、成本高。WiFi6是无线接入技术,主要用于室内无线终端上网,具有传输速率高、系统简单、成本低等优点,但不适用于高速移动通信。5G和WiFi6具有以下特点:(1)5G上行峰值传输速率达10Gbit/s,下行峰值传输速率达20Gbit/s。WIFI6在80MHz带宽下,单条空间流的峰值速率为600Mbit/s,在带宽为160MHz、8条空间流的情况下,峰值速率达9.

    2022年7月20日
    26
  • 三阶魔方还原公式_三阶魔方顶层小鱼口诀

    三阶魔方还原公式_三阶魔方顶层小鱼口诀1.第二层棱块归位:2.顶层十字3.顶层棱中间块归位这一步的目的是使顶层的4个棱中间块全部归位。转动顶层(U),若可以使一个棱中间块归位(如下图左,这里以[红-黄]块为例),而其他3个都

    2022年8月6日
    13
  • hfe和HFE_hfe参数

    hfe和HFE_hfe参数Mako:我们已经学习了有关晶体管的工作原理,晶体管的放大作用就是由小的输入得到大的输出吧?Doc:这种说法还稍微有点欠缺,应该说成用小的输入控制大的输出更为合适。如果只关注晶体管的电流,就可以这样考

    2022年8月3日
    4
  • 节流防抖的使用_监听滚动节流

    节流防抖的使用_监听滚动节流节流防抖的使用

    2025年7月26日
    0
  • Proteus中的电容(Capacitors)的分类[通俗易懂]

    Proteus中的电容(Capacitors)的分类[通俗易懂]AudioGradeAxial音响级轴向引线电容AxialLeadPolypropene轴向引线聚丙烯电容AxialLeadPolystyrene轴向引线聚苯乙烯电容CeramicDisc陶瓷圆片电容DecouplingDisc去耦圆片电容ElectrolyticAluminum铝质电解电容HighTempRadial径向引线高

    2022年8月22日
    7
  • Python练习题 025:判断回文数[通俗易懂]

    Python练习题 025:判断回文数[通俗易懂]【Python练习题025】 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。做题做到现在,这种题目已经很轻车熟路了。希望下一题能增加点难度啊~~~

    2022年7月5日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号