MessageDigest
转:
我们知道,编程中数据的传输,保存,为了考虑安全性的问题,需要将数据进行加密.我们拿数据库做例子.如果一个用户注册系统的数据库,没有对用户的信息进 行保存,如,我去页面注册,输入"Vicky","123456".注册.web服务器未对数据进行加密而直接写入数据库,那么数据库中的用户信息,便是 一个直接可用的数据!一旦服务器服务器被黑~那么用户的信息将毫无保留的展现在黑客面前...为了解决这个弊端,现在大多数都会将信息进行MD5加密. 如"Vicky"与"123456"加密后,会生成16位或者32位字符串.而黑客即便获得这些数据也无法使用...
MD5是常用的加密方法,这里主要讲述JDK中的java.security.MessageDigest加密方式!
- @Test
 - public void testMD() {
 - try {
 - String username = "Vicky";
 - MessageDigest messageDigest = MessageDigest.getInstance("MD5");
 - messageDigest.update(username.getBytes());
 - String usernameMD5 = messageDigest.digest().toString();
 - System.out.println(usernameMD5);
 - } catch (Exception e) {
 - e.printStackTrace();
 - }
 - }
 
打印的是:[B@107077e,这是因为输出的是byte[](messageDigest.digest()得到的是个二进制byte数组,有可能某些byte是不可打印的字符。)...我们可以使用Base64来处理byte[]
- @Test
 - public void testMD() {
 - try {
 - String username = "Vicky";
 - MessageDigest messageDigest = MessageDigest.getInstance("MD5");
 - messageDigest.update(username.getBytes());
 - System.out.println(Base64.encode(messageDigest.digest()));
 - } catch (Exception e) {
 - e.printStackTrace();
 - }
 - }
 
打印的是:AgwpBZPO+ErqxOosJp0ybQ==
当然我们可以编写函数,处理二进制转hex字符串.
如:
- /**
 - * 将16位byte[] 转换为32位String
 - *
 - * @param buffer
 - * @return
 - */
 - private String toHex(byte buffer[]) {
 - StringBuffer sb = new StringBuffer(buffer.length * 2);
 - for (int i = 0; i < buffer.length; i++) {
 - sb.append(Character.forDigit((buffer[i] & 240) >> 4, 16));
 - sb.append(Character.forDigit(buffer[i] & 15, 16));
 - }
 - return sb.toString();
 - }
 
编写测试语句
- @Test
 - public void testMD() {
 - try {
 - String username = "Vicky";
 - MessageDigest messageDigest = MessageDigest.getInstance("MD5");
 - messageDigest.update(username.getBytes());
 - System.out.println(toHex(messageDigest.digest()));
 - } catch (Exception e) {
 - e.printStackTrace();
 - }
 - }
 
打印:020c290593cef84aeac4ea2c269d326d,返回的是32位的字符串!!!
这样我们便可以直接使用JDK为我们提供的加密类与函数了!
MessageDigest不仅仅只为我们提供了"MD5"加密,还提供了"SHA-1"
创建的方法只为: MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
MD5与SHA-1的区别为:MD5是16位,SHA是20位(这是两种报文摘要的算法)
难道 MessageDigest 只能用作数据加密吗?如何使用MessageDigest生成安全令牌!!!
MessageDigest的更多相关文章
- MessageDigest消息摘要
		
<1>MessageDigest基础 MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法. MessageDigest 对象开始被初始化.该对象通 ...
 - 方法----MessageDigest和DigestUtils加密算法
		
总结:使用DigestUtils的方法加密的结果与messageDigest的方法加密结果一致,可使用DigestUtils替换MessageDigest 可省掉部分代码 package com.ac ...
 - MessageDigest简介
		
一.概述 MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法.信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值. MessageDi ...
 - Java利用MessageDigest提供的MD5算法加密字符串或文件
		
MD5是常用的加密算法,也经常用于校验信息完整,如文件的完整性.用术语讲,MD5是一种消息摘要算法(Message Digest Algorithm).另外还有一种常用的消息摘要算法SHA1.如果想了 ...
 - 利用Java自带的MD5加密java.security.MessageDigest;
		
MD5加密算法,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2.MD3.MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著 ...
 - java中MessageDigest加密工具类
		
import java.security.MessageDigest; public class EncryptionKit { public static String md5Encrypt(Str ...
 - Java之加密(信息摘要)工具类(依赖:java.security.MessageDigest或org.apache.commons.codec.digest.DigestUtils)
		
依赖于java.security.MessageDigest,支持MD5,SHA-1,SHA-256 import java.security.MessageDigest; import java.s ...
 - MessageDigest 类
		
MessageDigest 类 MessageDigest 类是一个引擎类,它是为了提供诸如 SHA1 或 MD5 等密码上安全的报文摘要功能而设计的.密码上安全的报文摘要可接受任意大小的输入( ...
 - MessageDigest简单介绍
		
本文博客原文 參考文章:http://blog.sina.com.cn/s/blog_4f36423201000c1e.html 一.概述 java.security.MessageDigest类用于 ...
 
随机推荐
- 2014年最大福利:185个Google排名因素!免费电子书下载
			
本博开张以来最大规模的干货放送!新手老手都有用! 不要再去追求PR了,不要再去发博客发论坛发外链了! 关注真正有用的Google排名因素! 整整185项,每一项都附带说明,必要的地方会给出一些附加的阅 ...
 - JS之tagNaem和nodeName
			
nodeName是节点的属性,tagName是元素的属性.元素是节点的子集.不是任何节点都有tagName的,比如文本节点,仅有nodeName属性. 这个和css中的倾斜和斜体的关系是一样的.不是所 ...
 - JS-002-修改元素属性(以按钮示例)
			
此文以修改 button 元素属性(例如:添加属性.修改属性.修改颜色样式.边框样式等)为简单示例,演示 js 修改 HTML 元素属性的基本方法,敬请参阅.若有不足之处敬请指正,不胜感激! 多不闲述 ...
 - 一个短小的JS函数,用来得到仅仅包含不重复元素的数组
			
下面函数主要利用了数组的sort方法,之后的逻辑是看最后一个元素是否等于要添加的元素,如果不是就往尾后加. 这个做法的效率等于sort方法的效率,还过得去. 代码: <!DOCTYPE HTML ...
 - json和string 之间的相互转换
			
json和string 之间的相互转换 <script type="text/javascript"> //先认识一下js中json function showInfo ...
 - 第三方Jar上传到Nexus3
			
mvn deploy:deploy-file -DgroupId=ESPPaaSService -DartifactId=ESPPaaSService -Dversion=1.0 -Dpackagin ...
 - mkdir
			
1,mkdir Problem: You want to use the mkdir() function from the sys/stat.h POSIX header, but you don’ ...
 - 用仿ActionScript的语法来编写html5——第九篇,仿URLLoader读取文件
			
第九篇,仿URLLoader读取文件 先看看最后的代码 function readFile(){ urlloader = new LURLLoader(); urlloader.addEventLis ...
 - LuaExpat笔记
			
xml xml是一种格式化数据交换语言, 适用于在网络上不同应用会话. http://www.xml.com/pub/a/98/10/guide0.html exPat 一种C语言实现的 xml 文档 ...
 - Azure billing 分析(2)
			
美国中南部的2008R2的A1的VM放了一天,CPU时间涨了13个小时,有点小贵,真的没有操作啊... 提示早上7到9点有一个小高峰. 看来平时没什么访问量时,还是改成A0能省点钱.因为第一天是用A0 ...