MD5是什么,怎么用着怪怪的
写作目的
通常我们在使用加密算法时,都是直接调用一个方法,比如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是什么,怎么用着怪怪的的更多相关文章
- 关于CryptoJS中md5加密以及aes加密的随笔
最近项目中用到了各种加密,其中就包括从没有接触过得aes加密,因此从网上各种查,官方的一种说法: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学 ...
- Android数据加密之MD5加密
前言: 项目中无论是密码的存储或者说判断文件是否是同一文件,都会用到MD5算法,今天来总结一下MD5加密算法. 什么是MD5加密? MD5英文全称“Message-Digest Algorithm 5 ...
- [C#] 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- android_m2repository_rxx.zip下载地址以及MD5
地址 MD5 https://dl-ssl.google.com/android/repository/android_m2repository_r08.zip 8C8EC4C731B7F55E646 ...
- 一种简单的md5加盐加密的方法(防止彩虹表撞库)
md5加密(或者说摘要算法)大家都很熟悉了 就不解释了 现在很多数据库设计都喜欢用单向加密的方式保存密码,验证时对提交的密码再次加密之后做密文对比 /// <summary> 使用MD5加 ...
- 2、摘要函数——MD2/MD4/MD5数字签名
摘要是用来防止数据被私自改动的方法,其中用到的函数叫做摘要函数.这些函数的输入可以是任意大小的信息,但是输出是大小固定的摘要.摘要有个重要的特性:如果改变了输入信息的任何内容,即使改变一位,输出也将发 ...
- c#官方推荐md5通用加密类
/// <summary> /// MD5加密 /// </summary> /// <param name="input">需要加密的字符串& ...
- 密码学应用(DES,AES, MD5, SHA1, RSA, Salt, Pkcs8)
目录 一.数据加密标准 - Data Encryption Standard(DES) 二.高级加密标准 - Advanced Encryption Standard(AES) 三.消息摘要算法第五版 ...
随机推荐
- netbeans git 配置(ssh方式)
git出问题了,自己又重新配置了下git. 参考文章: https://netbeans.org/kb/docs/ide/git_zh_CN.html#github
- CentOS使用ufw的方法
ufwはファイアウォールの管理ツールで.Ubuntuで標準的に使われています.ufw allow 80/tcp のような簡単なコマンドでポートを開け閉めできます. CentOS用のパッケージは用意され ...
- hdu10007
题意,很简单,给n个点的坐标,求距离最近的一对点之间距离的一半. 第一行是一个数n表示有n个点,接下来n行是n个点的x坐标和y坐标.实数. 这个题目其实就是求最近点对的距离 #include< ...
- ubuntu导出文件
ye@aliyun:python$ ./deploy.sh backup static-rw-r--r-- 1 ye ye 174K 2014-03-22 10:36 ./backup/fbz_sta ...
- 安装Oracle 11gR2,报错:[INS-06101] IP address of localhost could not be determined
安装Oracle 11gR2,报错:[INS-06101] IP address of localhost could not be determined 出现这种错误是因为主机名和/etc/host ...
- Android源码中的FLAG为何使用16进制
1.在阅读源码的时候经常发现有一些标志属性使用一些位操作来判断是否具有该标志,增加标志或者去除标志. 比如View.java中的 /** * This view does not want keyst ...
- uva 1267 - Network
这个题目关键在于把无根树变成有根树:这个用dfs: 然后用贪心的方法,从最深的那层开始,每次找到节点的上k层,建一个服务器,然后用一个dfs把这个服务器能够覆盖的节点标记: #include<c ...
- Android学习及如何利用android来赚钱
一.如何学习Android android开发(这里不提platform和底层驱动)你需要对Java有个良好的基础,一般我们用Eclipse作为开发工具.对于过多的具体知识详细介绍我这里不展 ...
- 李洪强iOS开发Swift篇—03_字符串和数据类型
李洪强iOS开发Swift篇—03_字符串和数据类型 一.字符串 字符串是String类型的数据,用双引号""包住文字内容 let website = "http:// ...
- CCS3.3之DM642开发环境建立
使用的仿真器是SEED-XDSUSB2.0/5V. 之前用的是CCS2.2,换成了CCS3.3的. 1.安装CCS3.3.38.在我安装完后,并没有急着升级,升级的程序是SR12_CCS_v3.3_S ...