MD5加密算法

标签(空格分隔): 加密算法 MD5 BASE64


Java实现MD5加密算法

在如今各种应用中,都需要用户名和密码登录。如果需要设置账户,那么就会涉及到储存用户账户信息的问题,为了保证所储存账户信息的安全,通常会采用MD5加密的方式来,进行储存。那么,什么是MD5加密算法呢?MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)。

它是是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆;所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后,把得到的散列值和原始的数据形成一个一对一的映射表,通过比在表中比破解密码的MD5算法散列值,通过匹配从映射表中找出破解密码所对应的原始明文。

MD5是让大容量信息在用数字签名软件签署私人密匙前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,那是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。这三个算法的描述和C语言源代码在Internet RFCs 1321中有详细的描述,这是一份最权威的文档,由Ronald L. Rivest在1992年8月向IETF提交。
一)消息摘要简介
一个消息摘要就是一个数据块的数字指纹。即对一个任意长度的一个数据块进行计算,产生一个唯一指印(对于SHA1是产生一个20字节的二进制数组)。消息摘要是一种与消息认证码结合使用以确保消息完整性的技术。主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4、MD5、SHA-1。

消息摘要有两个基本属性:

两个不同的报文难以生成相同的摘要
难以对指定的摘要生成一个报文,而可以由该报文反推算出该指定的摘要
代表:美国国家标准技术研究所的SHA1和麻省理工学院Ronald Rivest提出的MD5

对信息系统或者网站系统来说,MD5算法主要用在用户注册口令的加密,对于普通强度的口令加密,可以通过以下三种方式进行破解:

  • 在线查询密码。一些在线的MD5值查询网站提供MD5密码值的查询,输入MD5密码值后,如果在数据库中存在,那么可以很快获取其密码值。

  • 使用MD5破解工具。网络上有许多针对MD5破解的专用软件,通过设置字典来进行破解。

  • 通过社会工程学来获取或者重新设置用户的口令。

因此简单的MD5加密是没有办法达到绝对的安全的,因为普通的MD5加密有多种暴力破解方式,因此如果想要保证信息系统或者网站的安全,需要对MD5进行改造,增强其安全性,本文就是在MD5加密算法的基础上进行改进!
1.对字符串进行加密:

public static final String KEY_MD5 = "MD5";/*** MD5加密算法* @param data* @return* @throws NoSuchAlgorithmException*/public static byte[] encryptMD5(String data) throws NoSuchAlgorithmException {byte[] inputData = data.getBytes();if (data == null){return null;}else {MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);md5.update(inputData);return md5.digest();}}

这样的加密目前容易被破解,目前流行的趋势是加密后得到的byte再进行BASE64加密:

 /*** BASE64加密算法* @param data* @return*/public static String encryptBASE64(byte[] data){//byte[] inputdate = data.getBytes();String encode = new BASE64Encoder().encode(data);return encode;}/*** BASE64解密算法* @param data* @return* @throws IOException*/public static byte[] decryptBASE64(String data) throws IOException {byte[] code = new BASE64Decoder().decodeBuffer(data);return code;}

BASE64 严格地说,属于编码格式,而非加密算法.
按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
常见于邮件、http加密,截取http信息,你就会发现登录操作的用户名、密码字段通过BASE64加密的。

测试结果:

public static void main(String[] args) throws NoSuchAlgorithmException, IOException {MyEncrypt myEncrypt = new MyEncrypt();String name = "zt110e5";byte[] code1 =  myEncrypt.encryptMD5(name);byte[] code4 =  myEncrypt.encryptMD5(name);System.out.println("一次MD5加密后结果:"+code1);System.out.println("一次MD5加密后结果:"+code4);String code2 = myEncrypt.encryptBASE64(code1);String code5 = myEncrypt.encryptBASE64(code1);System.out.println("二次BASE64加密结果:"+code2);System.out.println("二次BASE64加密结果:"+code5);boolean b = checkData("zt110e5","AR/qvREz5KIPECCnOGHmBw==");System.out.println(b);}

控制台打印:

一次MD5加密后结果:[B@677327b6
一次MD5加密后结果:[B@14ae5a5
二次BASE64加密结果:AR/qvREz5KIPECCnOGHmBw==
二次BASE64加密结果:AR/qvREz5KIPECCnOGHmBw==
AR/qvREz5KIPECCnOGHmBw==
true

MD5加密算法简单实现相关推荐

  1. 简单、生动漫画讲述什么是MD5加密算法(转载,resource url见文末)

    本文将通过漫画的形式来通俗易懂的讲述什么是MD5加密算法(Message Digest Algorithm MD5(中文名为消息摘要算法第五版)),MD5加密算法的底层原理以及MD5加密算法的破解算法 ...

  2. Md5加密算法的原理及应用

    MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后 ...

  3. MD5加密算法与SHA加密算法

    2.MD5加密 2.1 概述 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为R ...

  4. MD5加密算法(转)

    一起谈谈MD5加密算法 MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明 ...

  5. 关于Md5加密算法的原理及应用

    MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后 ...

  6. MD5加密算法的原理和应用

    MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后 ...

  7. 简要分析用MD5加密算法加密信息(如有疑问,敬请留言)

    一.引言 最近看了媒体的一篇关于"网络上公开叫卖个人隐私信息"报导,不法分子通过非法手段获得的个人隐私信息,其详细.准确程度简直令人瞠口结舌.在互联网飞速发展的现在,我们不难想到, ...

  8. MD5加密算法及其在Java中的使用

    MD5算法简介 MD5是不可逆的单向加密算法,因为哈希算法是不可逆的,简单来说,就像我们可以获知5%2=1,3%2=1,7%2=1,但是,当我们仅仅拿到结果1的时候并不知道这是哪个数对2取余得到的结果 ...

  9. HTML如何引入md5算法,HTML_VBS MD5加密算法代码,复制代码 代码如下:Private Const - phpStudy...

    VBS MD5加密算法代码 复制代码 代码如下: Private Const BITS_TO_A_BYTE = 8 Private Const BYTES_TO_A_WORD = 4 Private ...

  10. MD5加密算法及Java实现

    MD5加密算法及Java实现 上个学期在学数据库的时候,大作业是用Java Web+MySQL实现一个简易的系统,其中老师就提到了MD5算法,用来将用户提交的密码进行加密后放在数据库中,以防被泄露.在 ...

最新文章

  1. Service的基本组成
  2. 关于OKR,你最关心的几个问题,答案在这里
  3. 王牌之作 特斯拉国产Model Y明年初下线
  4. Mysql日志-RedoLog、UndoLog和BinLog的关系捋顺
  5. 应用事件探查器优化SQL Server系统[转]
  6. Web 绘图—服务器端绘图
  7. 网络摄像头sdk_SenseDLC嵌入式人像识别SDK 安防边缘的“小巨人”
  8. 项目管理(6):备战pmp
  9. iOS25个性能优化,和内存优化
  10. 新零售大潮下 联想与BHG Mall签约共建智慧商城
  11. 模电学习感想,也叫笔记
  12. Linux系统配置(shell函数与数组)
  13. Arqit公司将于2023年用卫星发送量子密钥;QC Ware发布量子线性代数API | 全球量子科技与工业快讯第二十六期
  14. 最新超详细VMware虚拟机下载与安装(一篇足以带你上高速,附钥)
  15. 学生表课程表成绩表教师表
  16. mx3 android 5.1,魅蓝note3 稳定版Flyme 5.1.11.1[A]
  17. python自动获取微信公众号最新文章
  18. manjaro折腾手记
  19. 项目管理-挣值分析方法学习总结
  20. Creo 3.0-7.0 安装说明

热门文章

  1. C++模板的概念 定义和使用
  2. 计算机应用基础学科计划,《计算机应用基础》教学计划
  3. abp vnext数据库迁移(新建库)
  4. c语言———链表的创建
  5. 简信CRM:手机CRM软件的应用好处有哪些?
  6. 中医药天池大数据竞赛——中医文献问题生成挑战(一)
  7. lincese oracle_关于Oracle数据库企业版的license价格
  8. java中yml后缀文件_YML文件扩展名 - 什么是.yml以及如何打开? - ReviverSoft
  9. 学生成绩分析之成绩的预处理 python3 pandas 学生成绩汇总到一张表
  10. 百人计划(图形部分)Bump Mapping(凹凸贴图映射技术)