MD5和Base64
来源:互联网 发布:淘宝买水果靠谱吗 编辑:程序博客网 时间:2024/06/14 14:04
使用apache的commons-codec jar包进行Base64编码/解码,md5加密
package base64;import java.io.UnsupportedEncodingException;import org.apache.commons.codec.binary.Base64;import org.apache.commons.codec.digest.DigestUtils;public class MD5Demo { public static void main(String[] args) { String str = "你好,很高兴认识你!"; try { String encode = Base64.encodeBase64String(str.getBytes("utf-8")); System.out.println(encode); String decode = new String(Base64.decodeBase64(encode), "utf-8"); System.out.println(decode); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } String code = Base64.encodeBase64String(DigestUtils.md5(str)); System.out.println(code); }}
输出结果分别为
5L2g5aW977yM5b6I6auY5YW06K6k6K+G5L2g77yB你好,很高兴认识你!L9aMgawEobXiPtOoDBXsrg==
JDK本身也自带Base64的类,不过并不太好找
com.sun.org.apache.xerces.internal.impl.dv.util.Base64是一个,好像还有其他的。JDK1.8则有个java.util.Base64类。
JDK本身也自带MD5摘要算法功能,java.security.MessageDigest;
public static void main(String[] args) { String str = "你好,很高兴认识你!"; try { byte[] data = str.getBytes("utf-8"); MessageDigest md = MessageDigest.getInstance("md5"); byte[] md5 = md.digest(data);// md.update(data);// byte[] md5 = md.digest(); String code = Base64.encodeBase64String(md5); System.out.println(code); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("加密失败", e); } }
其中md.digest(data);等同于md.update(data);md.digest();其内部调用关系如下:
public byte[] digest(byte[] input) { update(input); return digest();}
另外不能连续调用update(byte[] input),会影响算法结果,即:
{ /*错误*/ md.update(data); md.update(data); md.digest();}{ /*错误*/ md.update(data); md.digest(data);}{ /*正确*/ md.update(data); md.digest();}{ /*正确*/ md.update(data);}
MessageDigest源码中有个state属性,update会更改其属性,digest后会改回默认,大概是因为这个属性的原因吧,engineUpdate()方法的源码没有找到,不清楚state是否真的对其造成影响,但是多次update后得到的md5并不一样
// The state of this digestprivate static final int INITIAL = 0;private static final int IN_PROGRESS = 1;private int state = INITIAL;/*** Updates the digest using the specified byte.** @param input the byte with which to update the digest.*/public void update(byte input) { engineUpdate(input); state = IN_PROGRESS;}/*** Completes the hash computation by performing final operations* such as padding. The digest is reset after this call is made.** @return the array of bytes for the resulting hash value.*/public byte[] digest() { /* Resetting is the responsibility of implementors. */ byte[] result = engineDigest(); state = INITIAL; return result;}
0 0
- Base64和MD5加密
- MD5和Base64
- MD5和Base64
- Base64 和 MD5 加密
- md5和base64记录
- MD5和Base64
- MD5和Base64
- Base64和MD5加密算法源码
- MD5和Base64混合算法
- unity3d的base64和MD5
- Java使用MD5和BASE64
- iOS MD5 和 Base64加密
- MD5 加密 和Base64加密
- md5和base64加密后
- iOS MD5 和 Base64 算法
- 让lua支持base64和md5
- 用wmlscript实现MD5和BASE64加密
- 让lua支持base64和md5
- 浅谈C#深拷贝,浅拷贝
- jdk jre jvm的区别
- 欧拉图和半欧拉图
- Tinker热修复接入心得
- SHELL\PERL\PYTHON
- MD5和Base64
- 人人都是架构师
- D和M方法实例化模型的区别
- FL Studio音频信号流程你知道吗?
- 最大公共子串的长度模板
- 基于MNIST数据集的深度学习库keras的学习
- Android之判断手机连接的网络类型是WIFI还是2G/3G/4G
- NOSQL 数据库分类
- nginx 配置