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)
上一篇 2022年7月11日 下午5:46
下一篇 2022年7月11日 下午5:46


相关推荐

  • 软件设计师考试考点分析总结

    软件设计师考试考点分析总结文章目录分值分布考点总结计算机组成与体系结构数据表示进制转换编码浮点数运算 CPU 结构运算器控制器 Flynn 分类法 CISC 复杂指令集 RISC 精简指令集流水线流水线相关概念存储系统 Cache 主存内存磁盘总线系统可靠性差错控制 校验码操作系统进程管理死锁及银行家算法存储管理页面置换算法文件管理索引文件目录结构位示图磁盘管理 I O 设备管理虚设备与 SPOOLING 技术微内核操作系统数据库数据库模式数据库设计过程 E R 模型关系代数规范化理论函数依赖键范式模式分解并发控制数据库安全备份恢复数据仓库与数据挖掘反规范化

    2025年12月15日
    4
  • The promises and challenges of std::async task-based parallelism in C++11 C++11 std::async/future/p…

    The promises and challenges of std::async task-based parallelism in C++11 C++11 std::async/future/p…

    2022年3月2日
    68
  • python中的extend功能及用法

    python中的extend功能及用法源于 执行类代码 parallel str search py 函数 combine resultextend 函数的功能 用于在列表末尾一次性追加另一个序列中的多个值 用新列表扩展原来的列表 A 1 2 3 B a b A extend 4 A extend 5 6 B extend c d B ext

    2026年3月19日
    2
  • 安全帽识别

    U2FsdGVkX1/Grm0Ta4WgSg8mvhSBuX3zjWYamkIvftw=

    2022年4月3日
    44
  • 解决IDEA中文乱码

    解决IDEA中文乱码解决 IDEA 控制台中文显示乱码的问题 2022 年 4 月 5 日 文章目录解决 IDEA 控制台中文显示乱码的问题 2022 年 4 月 5 日 最终解决记录 2022 4 5 方法 1 将 IDEA 的字符编码改为 GBK 经测试有效 方法 2 将 Windows 系统的默认编码格式改为 UTF 8 已证明无效 最近由于实验室项目需要学习 Scala 所以安装了 IDEA 开始学习 Java 基础 学习与练习过程中发现调试代码时控制台内无法显示中文字符 初步判断是字符编码的问题 百度了一下 按照网上说的方法修改了 IDEA 的显示字体 默认字

    2026年3月19日
    2
  • Pycharm改变项目路径后显示找不到解释器或者解释器无效的解决办法

    Pycharm改变项目路径后显示找不到解释器或者解释器无效的解决办法如果因为改变路径而出现下图的状况 方法一 此方法适用于要求必须使用虚拟环境中的解释器 1 打开设置 gt 项目解释器 gt 全部显示 2 把旧路径移除 点击图中 号 然后点击加号添加新的解释器路径 或者直接点击第三个 按钮进行编辑修改 方法二 此方法适用于不要求必须使用虚拟环境中的解释器 可以通过配置系统解释器来解决 1 与方法一步骤相同 但是在最后一项选择 添加 2 选择系统解释器 然后添加你安装 python 的路径 点击确定完成建议使用方法一 方便第

    2026年3月27日
    1

发表回复

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

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