`
忆梦竹
  • 浏览: 65940 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Base64以及Md5的使用

    博客分类:
  • JAVA
阅读更多
利用md5,和base64对java应用中的敏感数据进行的加密和编码。
1. md5和base64在维基百科中的定义:
   MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。 计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。md5 运算结果是一个固定长度为128位的二进制数,经过一系列的运算得到32个16进制数。
   Base64是一种使用64基的位置计数法。它使用2的最大次方来代表仅可打印的ASCII 字符。这使它可用来作为电子邮件的传输编码。在Base64中的变量使用字符A-Z、a-z和0-9 ,这样共有62个字符,用来作为开始的64个数字,最后两个用来作为数字的符号在不同的系统中而不同。一些如uuencode的其他编码方法,和之后binhex的版本使用不同的64字符集来代表6个二进制数字,但是它们不叫Base64。base64算法在维基百科里面的例子讲的很好很详细。

   link:   md5   http://zh.wikipedia.org/wiki/MD5
        base64   http://zh.wikipedia.org/wiki/Base64
2. 下面我将用代码的形式给出如何使用base64和md5算法(如果有其他的方法或者比较好的使用方式,期望同胞们不吝赐教。因为我还没有实际工作过,先谢谢了。)
注意:在Eclipse中需要将windows->preferences->Java->Compiler->Errors/Warning中的Deprecated and restricted Api下面的access rules修改为warning。这样使用sun.misc这个包下面的类就不会报错了。


   
package com.piedra.base64;
import java.io.IOException;

import sun.misc.*;
/**
 * 通过这个类实现利用base64算法进行编码和解码。
 * @author 
 *
 */
public class Base64 {
	
	@SuppressWarnings("restriction")
	public String encode(String toEncodeContent){
		if(toEncodeContent == null){
			return null;
		}
		BASE64Encoder encoder = new BASE64Encoder();
		return encoder.encode(toEncodeContent.getBytes());
	}
	
	public String encode(byte [] toEncodeContent){
		return encode(new String(toEncodeContent));
	}
	
	@SuppressWarnings("restriction")
	public String decode(String toDecodeContent){
		if(toDecodeContent == null) {
			return null;
		}
		byte[] buf = null;
		try {
			buf = new BASE64Decoder().decodeBuffer(toDecodeContent);
		} catch(IOException e){
			e.printStackTrace();
		} finally {
		}
		return new String(buf);
	}
}

下面是测试代码:

package com.piedra.base64;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class Base64Test {
	private Base64 base64;
	
	@Before
	public void init(){
		base64 = new Base64();
	}
	
	@Test
	public void testEncode() {
		String toEncodeContent = "I am grade to learn java.";
		String encodedContent = base64.encode(toEncodeContent);
		//由于要测试toEncodeContent经过BASE64编码后的字符序列。因此就直接打印,没有用Assert的方法。
		System.out.println(encodedContent);
	}

	@Test
	public void testDecode() {
		String toDecodeContent = "SSBhbSBncmFkZSB0byBsZWFybiBqYXZhLg==";
		String decodedContent = base64.decode(toDecodeContent);
		String expected = "I am grade to learn java.";
		String actual = decodedContent;
		assertEquals(expected,actual);
	}

	@After
	public void destroy(){
	}
}


接着来看看如何使用md5算法进行加密:
在java API中对于MessageDigest对象的用法有这样的描述:
The data is processed through it using the update methods. At any point reset
can be called to reset the digest. Once all the data to be updated has been updated, one of the digest methods should be called to complete the hash
computation.

package com.piedra.base64;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
 * 通过这个类我们可以利用getDigest方法对我们需要加密的数据进行加密。
 * @author 
 *
 */
public class Md5 {
	
	/**
	 * 通过这个方法可以获得特定输入数据的文摘
	 * @param input 需要进行获取文摘的字节数组
	 * @return 特定数据的文摘
	 */
	public byte[] getDigest(byte [] input){
		byte [] digestedValue = null;
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			//下面两个方法相当于适用 md.digest(input);
			md.update(input);
			digestedValue = md.digest();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return digestedValue;
	}
}

md5的测试代码以及base64和md5的结合使用:
package com.piedra.base64;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class Md5Test {
	private Md5 md5;
	private Base64 base64;
	
	@Before
	public void init(){
		md5 = new Md5();
		base64 = new Base64();
	}
	
	@Test
	public void testGetDigest() {
		String toDigest = "just a test.";
		byte [] digestedValue = md5.getDigest(toDigest.getBytes());
		System.out.println(new String(digestedValue));
	}
	
	@Test
	public void testEncrypt(){
		String toEncrypt = "This is my password.";
		byte [] encrypted = md5.getDigest(toEncrypt.getBytes());
		String encodedPassword = base64.encode(encrypted);
		System.out.println(encodedPassword);
	}
	
	@After
	public void destroy(){
	}
}


为什么用md5算法加密后又要利用base64算法进行编码:因为md5加密后得到的数据是128位的字节数组,将字节数组用base64算法加密后得到的是字符串,这样有利于在其在数据库中的存储。
(注:我工程的编译环境是JDK1.6,运行环境是JDK1.7)。

0
0
分享到:
评论

相关推荐

    轻松实现Sql Server 2005下的Base64、MD5、SHA1算法函数

    在SQL Server 2005中,开发人员经常需要处理数据加密和编码转换,例如Base64、MD5和SHA1。这些算法在数据库安全、数据验证和信息完整性方面起着重要作用。本篇文章将详细介绍如何在SQL Server 2005环境下轻松实现这...

    Base64+MD5 util

    4. 数据签名:在数据交换时,可以使用Base64+MD5的方式对数据进行签名,接收方可以通过同样的方法验证数据的完整性和来源。 综上所述,"Base64+MD5 util"是一个实用的工具,它结合了数据编码和安全哈希两大功能,...

    MD5 、base64加密技术

    MD5和Base64是两种在信息技术领域广泛使用的编码与加密技术,它们各自有其特点和应用场景。 MD5,全称Message-Digest Algorithm 5,是一种广泛使用的哈希函数,可以将任意长度的信息转化为固定长度的摘要(通常为...

    base64MD5加密文件工具

    当“base64MD5加密文件工具”将两者结合时,通常是先对文件内容进行MD5散列,生成一个唯一的MD5摘要,这个摘要本身是二进制的,然后使用Base64编码将MD5摘要转换为可读的字符串形式。这种组合方式在某些场景下具有...

    jquery的两个插件base64和MD5

    jquery的两个插件base64和MD5,很实用的2个插件。使用方法是引入jquery再引入这里面的插件 var passwd=$.base64.btoa("123456"); 是base64编码; var passwd=$.md5("123456");是md5加密,你会用得到的。

    DESPlus+Base64+MD5Util

    DESPlus是基于传统DES(Data Encryption Standard)的增强版,Base64是一种二进制转文本的编码方式,而MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数。 1. **DES(数据加密标准)**:DES是一种对称...

    base64与MD5加密方法

    Base64和MD5是两种常见的数据...总的来说,Base64和MD5是两种基础且实用的工具,理解它们的工作原理和使用方法对进行信息安全处理至关重要。在Java开发中,合理运用这两种技术可以提高应用的安全性和数据处理的效率。

    Base64加密、MD5加密

    在WinForm开发中,结合这两者,可以创建一个简单的数据处理工具,如一个文件加密解密器,使用Base64编码将文件内容变为不可读,然后用MD5计算编码后的数据摘要,以确保数据的完整性和一致性。 在提供的"加密程序...

    js base64和md5工具类

    js base64和md5工具类js base64和md5工具类js base64和md5工具类js base64和md5工具类

    数据md5转base64加密

    Java后台用于对数据md5转base64加密处理的一个方法封装。简单的一个加密解密的封装,初学者用,大神勿喷

    JS实现密码加密(base64, md5, sha1)

    以上就是关于使用JavaScript实现Base64、MD5和SHA1密码加密的知识点,这些技术在Web开发中常用于数据安全和身份验证。但请记住,对于密码存储,应当优先考虑使用专门设计的密码哈希算法,以提供更好的安全保护。

    crypto的base64/md5/sha1代码文件

    可使用该资源,该压缩包内只有8个文件base64_decoder.h、base64_decoder.c、base64_encoder.h、base64_encoder.c、md5.h、md5.c、sha1.h、sha1.c,专门写了一篇博客展示了如果使用。

    Base64_MD5_SHA256_tool.7z

    总的来说,这个工具是针对信息安全领域设计的,可以帮助用户快速计算和验证Base64、MD5和SHA256编码,对于开发者、网络安全专业人员以及需要验证文件完整性的用户来说非常有用。由于MD5的安全性下降,工具提供SHA256...

    全自动多功能编码转换工具(URL,ASCII,Base64,MD5)

    标题中的“全自动多功能编码转换工具”是一款软件应用,专门用于处理不同类型的编码转换,包括URL编码、ASCII编码、Base64编码以及MD5哈希。这些编码方式在信息技术领域各有其特定用途,下面将逐一详细介绍。 1. **...

    Java实现的Base64、MD5、3DES三种工具

    Java实现的Base64、MD5、3DES三种工具 本文档将对Java实现的Base64、MD5、3DES三种工具进行详细的知识点解析。 一、Base64加密工具 Base64是一种基于ASCII字符集的加密方法,它使用一个64字符的字符集来表示二...

    纯c MD5和base64代码

    MD5和Base64是两种在信息技术领域广泛使用的编码技术,它们各有其特定的应用场景和功能。 MD5,全称为Message-Digest Algorithm 5,是一种广泛使用的哈希函数,能够将任意长度的数据转换为固定长度的摘要(通常为...

    java实现的base64,MD5,3des工具.zip

    java实现的base64,MD5,3des工具.zipjava实现的base64,MD5,3des工具.zipjava实现的base64,MD5,3des工具.zipjava实现的base64,MD5,3des工具.zip

    二进制ArrayBuffer图片转化为base64.md

    二进制ArrayBuffer图片转化为base64.md

    JS实现加密(base64, md5, sha1)

    常见的加密算法有Base64、MD5和SHA1。这些方法在不同的场景下有着各自的用途和特点。 1. **Base64编码**: Base64是一种用64个字符来表示任意二进制数据的方法。它不是一种加密方式,而是一种编码方式,主要用于在...

Global site tag (gtag.js) - Google Analytics