写作目的

通常我们在使用加密算法时,都是直接调用一个方法,比如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. jquery插件----文件上传uploadfile

    使用了一款jquery上传的插件,ajax上传,可以显示上传的进度,高可配性,简要记录. 插件地址http://hayageek.com/docs/jquery-upload-file.php git ...

  2. 搭建LNMP发布ecshop系统及压测启用opcache缓存与否的情况

    安装环境:CENTOS6.5,nginx1.6.2,php-5.5.18,mysql5.5.38 在安装软件之前安装epel源,就可以直接用yum安装libmcrypt,mhash,mcrypt等ph ...

  3. 针对IE的CSS hack 全面 实用

    .all IE{property:value\9;} .gte IE 8{property:value\0;} .lte IE 7{*property:value;} .IE 8/9{property ...

  4. HTML 中<style>中</style>里面<!-- -->标签是干嘛的

    baidu:没什么用,这个主要是针对低版本的浏览器<!-- -->是html的注释标签,高版本的浏览器会识别<style>标签是样式表,并忽略里面的html注释标签,会解析它, ...

  5. 由 OR 引起的死循环

    在客商迁移测试时,程序一旦开始执行就不能自动停止.只能通过手动中断应用服务器的进程来停止.检查迁移的一个表,这个表迁移前没有数据,迁移最多会插入3w条左右数据,但是迁移过程执行2个多小时候再看,已经有 ...

  6. 【web安全】第一弹:利用xss注入获取cookie

    首先一定要先来吐槽一下tipask系统.这是一枚开源的类似百度知道的系统,但是漏洞多多,最基本的XSS注入都无法防御. 言归正传: [准备1] cookie接收服务器. 平时喜欢用sae,所以在sae ...

  7. nutch http file 截断问题

    问题: 列表页预计抽取 355+6 但实际只抽取到220条链接. 原因是nutch对http下载的内容的长度进行了限制. 解决方案:这里将这个属性扩大10倍. vim conf/nutch-defal ...

  8. bzoj 1455: 罗马游戏 左偏树+并查集

    1455: 罗马游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 668  Solved: 247[Submit][Status] Descriptio ...

  9. front-end

    http://info.1688.com/detail/1139720782.html http://segmentfault.com/q/1010000000136513 http://h5apps ...

  10. ANDROID_MARS学习笔记_S05_005_方向传感器

    import android.app.Activity; import android.content.Context; import android.hardware.Sensor; import ...