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类用于 ...
随机推荐
- Nmap 網路診斷工具基本使用技巧與教學
Nmap 是一個開放原始碼的網路掃描與探測工具,可以讓網路管理者掃描整個子網域或主機的連接埠等,功能非常強大. Nmap(Network Mapper)是一個開放原始碼的網路檢測工具,它的功能非常強大 ...
- [LeetCode]题解(python):062 Unique path
题目来源 https://leetcode.com/problems/unique-paths/ A robot is located at the top-left corner of a m x ...
- (leetcode)Missing Number
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...
- 包含Blob字段的表无法Export/Import
最近一直用MySQL-Front的导出导出工具完成数据库的备份,确实比较方便快捷. 后来增加了一张表,其中有blob字段,上传几个文件后,发现导出不好用了,进度条长期处于停滞状态. 想想也是,要把bl ...
- 点击空白处隐藏div
class="bigPic"的div是被显示或隐藏的div,另外.case > ul > li是class="bigPic"的父级元素 $(&quo ...
- 详解MySQL---DDL语句、DML语句与DCL语句
背景:近几年,开源数据库逐渐流行起来.由于具有免费使用.配置简单.稳定性好.性能优良等优点,开源数据库在中低端应用上占据了很大的市场份额,而 MySQL 正是开源数据库中的杰出代表.MySQL 数据库 ...
- [BS] 小知识点总结-04
1. ios新知识学习思路: 在开发过程中如果遇到某种新需求以前从未做过,例如改变textField的Placeholder颜色,有如下思路和途径: 1.1 在Storyboard/Xib辅助编辑器A ...
- CAM350测量
CAM350 测量方法 1. 单位设置:在菜单:Settings 下选中 Unit: 英制 公制 精确度 CAM350 软件默认的是英制,不习惯用英制的人,就改为公制的呀 软件默认的是英制 就改为公制 ...
- [PCL]keypoint
1. Harris角点 http://www.cnblogs.com/ironstark/p/5064848.html 2. ISS关键点 http://www.cnblogs.com/ironsta ...
- [ROS]3 Linux编程练习
一起做RGB-SLAM(2)实验 第二讲 从图像到点云 http://www.cnblogs.com/gaoxiang12/p/4652478.html exbot@ubuntu:~$ cd Code ...