package cn.peter;

import sun.misc.BASE64Encoder;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; /**
* Created by zyz on 2016-10-8.
*/
public class Md5Test {
public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
String password="123456";
MessageDigest md=MessageDigest.getInstance("md5");
byte[] bMd5=md.digest(password.getBytes());
int i;
StringBuffer buffer=new StringBuffer("");
for(int k=0;k<bMd5.length;k++){
i=bMd5[k];
if(i<0){
i+=256;
}
if(i<16){
buffer.append("0");
}
// System.out.println(i+"->"+Integer.toHexString(i));
buffer.append(Integer.toHexString(i));
}
BASE64Encoder encoder=new BASE64Encoder();
String strBase64=encoder.encode(password.getBytes());
String strBase64Md5=encoder.encode(bMd5);
System.out.println(password+" 占字符个数为:"+password.length());
System.out.println(password+" 占的字节数为:"+password.getBytes("utf-8").length);
System.out.println(password+" md5编码后占的字节数为:"+bMd5.length);
System.out.println(password+" md5编码为:"+buffer.toString()+",共"+buffer.toString().length()+"个字符.");
System.out.println(password+" Base64编码为:"+strBase64+",共"+strBase64.length()+"个字符.");
System.out.println(password+" 的md5编码转Base64编码为:"+strBase64Md5+",共"+strBase64Md5.length()+"个字符."); }
}

123456 占字符个数为:6
123456 占的字节数为:6
123456 md5编码后占的字节数为:16
123456 md5编码为:e10adc3949ba59abbe56e057f20f883e,共32个字符.
123456 Base64编码为:MTIzNDU2,共8个字符.
123456 的md5编码转Base64编码为:4QrcOUm6Wau+VuBX8g+IPg==,共24个字符.

Base64编码说明
  Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。

  为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。

Base64编码表

码值 字符   码值 字符   码值 字符   码值 字符
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

Java基础---MD5和BASE64的更多相关文章

  1. python的md5和base64加密

    在用jmeter测试接口时,有的请求参数会加密,例如,回流接口:http://ip:port/oms-gateway-datareflow-mq/orderReflow/tmsPracticeActi ...

  2. 【java】之 apache commons-codec 与Apache Digest demo实例,支持md5 sha1 base64 hmac urlencode

    使用commons-codec 进行加密的一些操作 package com.jiepu.ApacheDigest; import java.io.FileInputStream; import org ...

  3. Java基础-使用JAVA代码剖析MD5算法实现过程

    Java基础-使用JAVA代码剖析MD5算法实现过程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  4. java基础---->Base64算法的使用

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息.详细的Base64信息,可以参见维基百科:https://en.wikipedia.org ...

  5. 基本的java加密算法MD5等等

    简单的java加密算法有: BASE64       严格地说,属于编码格式,而非加密算法 MD5             (Message Digest algorithm 5,信息摘要算法) SH ...

  6. 3.Java基础之Date对象

    毕向东老师Java基础学习笔记——Date对象 今天学习Java中的Date对象后,感觉这个对象对我们主要有以下几点用处. 1.获取时间和日期并按照自己定义的格式显示. 2.网站设计时显示时间.  知 ...

  7. 1.Java基础之System对象

    毕向东老师Java基础学习笔记——System对象 今天学习Java中的System对象后,感觉这个对象对我们主要有以下几点用处. 1.获取当前操作系统版本和类型. 2.获取当前操作系统的path中的 ...

  8. Java基础语法

    java基础学习总结——基础语法1 一.标识符

  9. java 基础题 很基础, 很有趣

    都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底, 老手们就不用进来了,免得笑话我们这些未出校门的孩纸们, ...

随机推荐

  1. LogBack,升级版的log4J

    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configuration SYS ...

  2. Ejabberd作为推送服务的优化手段

    AVOS Cloud目前还在用Ejabberd做Android的消息推送服务.当时选择Ejabberd,是因为Ejabberd是一个发展很长时间的XMPP实现,并且基于Erlang,设想能在我们自主研 ...

  3. truncate table语句和delete table语句的区别

    truncate table 表名 ; delete from 表名; 都是用来删除表中所有的记录,前者删除数据后表的标识列会重新开始编号,它比delete语句使用的系统资源和事务日志资源更少,但是表 ...

  4. Android Studio in OSX 提高工作效率的快捷键

    前言 本篇文章参考了<倍数提高工作效率的Android Studio>一文,快捷键基于OS X系统. OS X Yosemite 10.10.5 Android Studio 1.3.1 ...

  5. java.lang.OutOfMemoryError: Java heap space

    java.lang.OutOfMemoryError: Java heap space 原因:内存溢出,内存一直申请一直占用,无法回收 解决方法:定时重启下服务,

  6. JS正则大全

    验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9][0-9]*)$ 验证 ...

  7. 跨域访问CORS

    由于现代浏览器的同源策略,合理的跨域请求也变得至关重要. CORS(Cross-Origin Resource Sharing,跨域资源共享)定义了在必须访问跨域资源时,浏览器与服务器应该如何沟通.它 ...

  8. Android test---robotium----简单例子

    1.首先新建一个要被测试的工程,命名为”robotium“:一个很简单的Android 应用程序:主页面只有个 TextView 控件: 2. 在建一个用于测试的工程 ,命名为”robotiumTes ...

  9. C语言PIC32 serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 今天介绍下我新完成的为 ...

  10. [Nginx] 在Linux下的启动、停止和重加载

    Nginx的启动 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 其中-c参数指定配置文件路径.   Nginx的停止 ...