在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 { ...
随机推荐
- 7.2.1 生成1~n的排列(全排列)【STL__next_permutation()_的应用】
#include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> ...
- QTableWidget的用法总结
在使用Qt不多的日子里,已经两次用到了QTableWidget这个控件,也慢慢的习惯和喜欢上了它.再使用QTableWidget的时候,已不像刚开始使用时的迷茫.嗯嗯.现在就来总结总结我与QTable ...
- Android Support Library更新到v22.1之AppCompat新特性
构建一个可以跑在不同版本 Android 平台的软件,是非常复杂和耗时的.为了解决这个问题,Android 推出了 Android Support Library (安卓兼容包),让新的UI控件也可以 ...
- 基于visual Studio2013解决C语言竞赛题之0422牛顿迭代法
题目
- Eclipse3.6 添加JUnit源代码
Eclipse中无法查看JUnit源代码,也无法设置源代码的jar. 解决方法: 1. 下载org.junit.source_4.8.1.v4_8_1_v20100427-1100.jar,放到ec ...
- IOS 获取网络图像尺寸 更改 图像色彩值 什么一套方法灰色
直接在代码 头文件 // 图片处理 0 半灰色 1 灰度 2 深棕色 3 反色 +(UIImage*)imageWithImage:(UIImage*)image grayLevelType:(UII ...
- Sql 参数的使用
代码片段: a)声明实例 1.声明SQLCommand实例. SqlCommand cmd = new SqlCommand(); 2.声明SqlDataAdapter实例. SqlDataAdapt ...
- C++:互斥量C++实现,内存调试,自动锁
/*互斥量C++实现+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ class CMutex { public: C ...
- sql server 深入使用 总结 part1
1 OUTPUT 应用场景 : 1.1.对于INSERT,可以引用inserted表以查询新行的属性. insert into [表名] (a) OUTPUT Inserted. ...
- SQL Server 基础 02 确保数据完整性
本章总结目的: 为了巩固 约束.事务! 约 束 使用数据库约束就是保证数据库的完整性的方法,SQL Server 涉及的完整性有三个: 1.实体完整性 : (不能为空且重复,即唯一的,例如身份证 ...