写作目的

通常我们在使用加密算法时,都是直接调用一个方法,比如Base64,直接把待加密的字符串给加密好了。对于某些使用公私钥的算法,最多再传入一段公钥即可。但是在使用MD5算法的时候,总是需要用到一个叫做Digest的东西,然后再经过一段有些神秘的代码把二进制转十六进制,才能获得想要的MD5“加密”后的结果。

我在之前用到MD5加密时,对此感到疑惑,但是仅仅把别人写好的代码拿来用,并未深究原因,知其然而不知其所以然。所以抽时间搞清楚了原因,并写下这篇文章作为记录。

MD5根本不是加密

MD5的全称是MD5消息摘要算法(MD5 Message-Digest Algorithm),是消息摘要算法的第五版。因此MD5的主要用途是用于验证消息传递途中的完整性,但并不隐藏消息内容。而我们日常所说的加密算法,一般是为了使消息在传输过程中不要被中间人查看或者篡改,并且消息的接收方式有方法解密并查看到完整的原始消息。

简单来说,加密后的信息是完整的,可以解密得到原始数据;摘要得到的信息不完整,无法恢复原始数据。所以MD5算法和加密算法的用途并不相同。严格来说,MD5并不能被称为加密算法。

MD5到底在做什么
顾名思义,消息摘要算法,“摘要”是其中重要的步骤,这也就提到了本文一开始所说的Digest的作用。

MD5在Java中的使用流程如下:
1. 创建一个MD5摘要算法的对象

MessageDigest md = MessageDigest.getInstance("MD5");

2. 将待处理的字符串转换为字节数组

byte[] byteMessage = message.getBytes();

3. 用摘要算法对象处理该字节数组,得到一个128位的摘要字节数组

byte[] buffer = md.digest(byteMessage);

4. 把数组每一字节(一个字节占八位)转换成16进制,得到原始消息的MD5值

String md5str = bytesToHex(buffer);

从上述过程中可以看出,MD5算法的处理过程明确分为摘要和将摘要字节拼接成十六进制串这两个阶段。

小结
弄清楚了MD5的含义,我也明白了MD5和加密没什么关系。以后提起MD5时,再不会顺口说出“MD5加密”这种话来了。

MD5是什么,怎么用着怪怪的的更多相关文章

  1. 关于CryptoJS中md5加密以及aes加密的随笔

    最近项目中用到了各种加密,其中就包括从没有接触过得aes加密,因此从网上各种查,官方的一种说法: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学 ...

  2. Android数据加密之MD5加密

    前言: 项目中无论是密码的存储或者说判断文件是否是同一文件,都会用到MD5算法,今天来总结一下MD5加密算法. 什么是MD5加密? MD5英文全称“Message-Digest Algorithm 5 ...

  3. [C#] 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...

  4. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

  5. android_m2repository_rxx.zip下载地址以及MD5

    地址 MD5 https://dl-ssl.google.com/android/repository/android_m2repository_r08.zip 8C8EC4C731B7F55E646 ...

  6. 一种简单的md5加盐加密的方法(防止彩虹表撞库)

    md5加密(或者说摘要算法)大家都很熟悉了 就不解释了 现在很多数据库设计都喜欢用单向加密的方式保存密码,验证时对提交的密码再次加密之后做密文对比 /// <summary> 使用MD5加 ...

  7. 2、摘要函数——MD2/MD4/MD5数字签名

    摘要是用来防止数据被私自改动的方法,其中用到的函数叫做摘要函数.这些函数的输入可以是任意大小的信息,但是输出是大小固定的摘要.摘要有个重要的特性:如果改变了输入信息的任何内容,即使改变一位,输出也将发 ...

  8. c#官方推荐md5通用加密类

    /// <summary> /// MD5加密 /// </summary> /// <param name="input">需要加密的字符串& ...

  9. 密码学应用(DES,AES, MD5, SHA1, RSA, Salt, Pkcs8)

    目录 一.数据加密标准 - Data Encryption Standard(DES) 二.高级加密标准 - Advanced Encryption Standard(AES) 三.消息摘要算法第五版 ...

随机推荐

  1. CentOS系统安全配置

    http://down.51cto.com/data/318797 http://www.centos.bz/2011/07/centos-system-security-configure/ htt ...

  2. jsp查询页面和结果页面在同一页面显示和交互

    用frameset实现查询页面和结果页面在同一页面 用target实现交互显示在同一页面上 请参照以下方法解决: main.jsp: <html> <head> <met ...

  3. 【原创】Mvc学习笔记(1)

    1.新建MVC4项目 在MVC4中有App_Data文件夹,这个文件夹里可以放一些重要的数据,比如说数据库的mdf文件等等,这个文件夹非常安全,因为这个文件夹不允许被别人下载,不允许被浏览器访问. A ...

  4. contos vsftp 530错误

    只需要把/etc/pam.d/vsftpd文件中的 auth       required    pam_listfile.so item=user sense=deny file=/etc/vsft ...

  5. AppStore 审核中文版 --- 程序员必看

    App Store审核指南中文版(2014.10.11更新) 2014-11-03 程序猿 苹果在9月3日对App Store审核指南进行了重大更新,新添加了扩展.HealthKit.HomeKit以 ...

  6. File上传

    http://wenku.baidu.com/link?url=bsufrjDQztceWCUw2gqFeYkL1_95t9yIyV1LfHVYL9URAlpWSK_ALO1bAWSlBdnPXYXE ...

  7. windows桌面添加右键环境

    1.组合键win + R,输入regedit,回车   打开注册表编辑器 2.找到目录中[HKEY_CLASSES_ROOT\Directory\Background\shell]对其右键,新建一个项 ...

  8. MySQL源码之Thread cache

    MySQL server为每一个connection建立一个thread为其服务,虽然thread create比着fork process代价高,单高并发的情况下,也不可忽略. 所以增加了Threa ...

  9. mybatis源码分析(2)——事务概述

    这篇文章主要对mybatis中的事务做一简单的分析,帮助读者理清一些概念. 先来看看在JAVA事务的相关技术,在JAVA中有两类事务,JDBC事务和JTA事务,如果是JDBC类型的事务,则是由Conn ...

  10. SharePoint 2010中使用SPListItemCollectionPosition更快的结果

    转:http://www.16kan.com/article/detail/318657.html Introduction介绍 In this article we will explore the ...