在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 { ...
随机推荐
- [POJ 2588]--Snakes(并查集)
题目链接:http://poj.org/problem?id=2588 Snakes Time Limit: 1000MS Memory Limit: 65536K Description B ...
- USACO Preface Numbering 构造
一开始看到这道题目的时候,感觉好难 还要算出罗马的规则. 但是仔细一看,数据规模很小, n 只给到3500 看完题目给出了几组样例之后就有感觉了 解题方法就是: n的每个十进制数 转换成相应的罗马数字 ...
- Oracle中奇怪的【不等于号】
Oracle中奇怪的[不等于号] 在Oracle中,不等号有三种:<>,!=,^= 例如: select * from test where name<>'xn'.返回的结 ...
- 【Dior风格/舒适防风面料/抗静电里衬/大身撞色拼接/精致平驳领/时尚便西款/蓝绿色】玛萨玛索男装网购商城
[Dior风格/舒适防风面料/抗静电里衬/大身撞色拼接/精致平驳领/时尚便西款/蓝绿色]玛萨玛索男装网购商城 [特价商品] Dior风格/舒适防风面料/抗静电里衬/大身撞色拼接/精致平驳领/时尚便西款 ...
- nodejs--express开发个人博客(-)
写完了入门笔记,开始进入开发阶段吧.基于上一节的内容,现在着手开发个人博客系统.先划分一下功能吧 /:首页 /login:登陆 /reg:注册 /post:发表文章 /logout:退出 首先规划一下 ...
- 飞翔(LIS变形)
飞翔 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 鹰最骄傲的就是翱翔,但是鹰们互相都很嫉妒别的鹰比自己飞的快,更嫉妒其他的鹰比自己飞行的有技巧.于是,他们决定举办一场 ...
- QTP实践总结
QTP实践总结 查询数据库修改freq 1.Testcasetable创建查询select * from testcasetable order by fseq desc 2.设计表-选项-修改自动递 ...
- ListView优化问题
可以参考:http://blog.csdn.net/bill_ming/article/details/8817172和http://blog.csdn.net/xiangjai/article/de ...
- 采用openFileOutput获取输出流
package com.example.login.service; import java.io.BufferedReader; import java.io.File; import java.i ...
- 1076: [SCOI2008]奖励关( dp )
期望状压dp.... ------------------------------------------------------------------ #include<cstdio> ...