在Java中使用MD5和BASE64
MD5:
在上一篇《Servlet的学习之Session(5)》中,为了能使获取的所有随机数都能有相同的位数,我们采用MD5获取随机数的消息摘要(或称数据指纹、数据摘要等等)。
MD5可以将所有的数字组合进行一个算法的运算得出一个新的数字组合,并且这个新的数字组合都是128位,也称为MD5码。MD5码是不可逆的,即无法通过MD5码来进行反向运算得到原始的数据。MD5的应用场合非常多,比如保存用户密码(防止数据库中用户密码被管理员看到,所以数据库中的密码不许使用明文密码),或者文件校验(防止下载的文件是被别人修改后的文件而不是官方原文件,比如苹果开发工具的XCodeGhost事件),或者光盘破损校验等等。
在Java中通过MessageDigest对象来调用方法获取某些数字组合的MD5码(顺便说一句,MessageDigest也可以用来获取SHA校验码)。通过MessageDigest对象调用digest方法来将数字组合转变为字符数组:
String data = "1";
MessageDigest md = MessageDigest.getInstance("md5");
byte[] md5 = md.digest(data.getBytes());
System.out.println(Arrays.toString(md5));
获得的字节数组都是128位,即16字节。换句话说经过MD5后的字符数组中有16个元素,因为Java中byte的范围为-128~127,所以每个元素都在这范围内:

注意,经过md5后的字符数组中含有负数元素,因此如果将这个字符数组进行转换成字符串,查询GB2312或者UTF-8都是不合适的会出现乱码例如:
String sData = new String(md5,"utf-8");
System.out.println(sData);

那么我们将如何使这个字节数组转换成一个没有乱码的字符串作为一种随机数?我们可以采用“Base64”编码。
Base64编码:
Base64编码是把每3个8位字节(3*8=24)转成4个6位字节(4*6=24),且在每个6位字节前补两个0,重新形成8位一个字节的形式,这样总的长度还是相同的,并且保证最高位不是1(即不是负数)。
如果最后剩下的字符不足3个字符,则用0填充高位,输出字符使用“=”。因此编码后的字符串末尾可能会出现一个或两个“=”。
根据上述原理,最高两位均为0,那么剩下6位全为1二进制对应的十进制为63,所以最大数不会超过63,根据这64个数进行一个码值与字符的对应,就成了base64编码,对应编码表如下图所示:

在Java中我们使用BASE64Encoder对象调用encode方法来将某个字节数组进行编码。
我们将上面的MD5码进行base64编码:
BASE64Encoder be = new BASE64Encoder();
String base64 = be.encode(md5);
System.out.println(base64);
可以看到这时将乱码都对应成字符了:

注意,BASE64Encoder无法查看其API文档,因为sun公司没有将其正式发布出来,也就没有相应的javadoc文档可以查阅。只能通过下载相应的jar包或者通过网上查阅,如果在开发IDE中发现无法找到sun.misc.BASE64Encode请在网上下载这个JAR包并导入即可。或者请看这篇博客的方法: 《BASE64Encoder及BASE64Decoder的正确用法》
在Java中使用MD5和BASE64的更多相关文章
- java中使用MD5进行加密 BASE64Encoder 编码
原文地址:http://www.cnblogs.com/weiwangnuanyang/articles/4326336.html java中使用MD5进行加密 在各种应用系统的开发中,经常需 ...
- java中使用MD5进行加密
java中使用MD5进行加密 在各种应用系统的开发中,经常需要存储用户信息,很多地方都要存储用户密码,而将用户密码直接存储在服务器上显然是不安全的,本文简要介绍工作中常用的 MD5加密算法,希 ...
- java中使用MD5加密技术
在项目中经常会对一些信息进行加密,现在常用的信息加密技术有:MD5.RSA.DES等,今天主要说一下,md5加密,以及如何在java代码根据自己的业务需求使用md5. MD5简介: MD5即Messa ...
- java中使用MD5加密的算法
MD5,全名Message Digest Algorithm 5,中文名为消息摘要算法第五版,为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.以下是JAVA语言中使用MD5加密的工具 ...
- Java中使用MD5加密的简单实现
import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorith ...
- Java中处理接口返回base64编码的图片数据
在做接口测试的时候,某些接口返回的content是一大段加密文字.这种情况下,有可能是返回的图片加密数据,需要将这些数据转换成图片进行保存查看. 例如: 这里,可以看到Content对应的键值开头有“ ...
- JAVA中使用MD5加密实现密码加密
1.新建Md5.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package c ...
- android中的MD5、Base64、DES/3DES/ADES加解密
MD5摘要算法: <span style="font-size:18px;">主要代码: String s = edit.getText().toString(); i ...
- java 中使用MD5加密 , 入库时对密码进行加密
import lombok.extern.slf4j.Slf4j; import java.security.MessageDigest; @Slf4j public class MD5Util { ...
随机推荐
- CentOS下安装两个或多个Tomcat7
链接地址:http://lcbk.net/tomcat/1407.html 首先安装JDK 安装之前检查下是否已经安装了openJDK,如果已安装,建议用yum remove 卸载掉. [root@b ...
- PHP学习笔记3-逻辑运算符
逻辑运算符图解: 逻辑且&&: <?php /** * Created by PhpStorm. * User: Administrator * Date: 2015/6/26 ...
- 数据结构C语言版 有向图的十字链表存储表示和实现
/*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...
- CPU满格的元凶,这回是由于QTimer引起的(默认interval是0,太猛)
timer_space = new QTimer(); qDebug() << SystemGlobal::m_app->SpaceUse; qDebug() << ti ...
- Maven创建项目: Failed to execute goal org.apache.maven.plugin( mvn archetype:create)
一.概述: 在使用mvn 命令mvn archetype:create -DgroupId=com.chuanliu.c11 -DartifactId=c11searcher在控制创建maven项目和 ...
- 使用 stvd 编译STM8S 时能看到使用RAM ROM大小的方法
刚刚安装的STVD编译器,编译时候不显示用了多少RAM和ROM?对于此问题.有两个方法:一是看.map文件 还有一种是 添加一个补丁,详细操作例如以下,能够在我的资源里下载对应的文件. http:// ...
- java序列化对象 插入、查询、更新到数据库
java序列化对象 插入.查询.更新到数据库 : 实现代码例如以下: import java.io.ByteArrayInputStream; import java.io.ByteArrayOutp ...
- 【ant项目构建学习点滴】--(3)打包及运行jar文件
<?xml version="1.0" encoding="UTF-8"?> <project default="compile&q ...
- Git 将本次修改追加在上一次修改上面
Git 将本次修改追加在上一次修改上面 git add . git commit --amend 之后就是进入日志提交页面 确保change-Id那条记录出现在最后一行,如: zh-->en 修 ...
- 初探 插头DP
因为这题,气得我火冒三丈! 这数据是不是有问题啊!我用cin代替scanf后居然就AC了(本来一直卡在Test 18)!导致我调(对)试(排)了一个小时!! UPD:后来细细想想,会不会是因为scan ...