`
zhb8015
  • 浏览: 399623 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
Spring Roo杂谈
浏览量:0
社区版块
存档分类
最新评论

md5,base64

阅读更多

利用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这个包下面的类就不会报错了。

01 package com.piedra.base64;
02 import java.io.IOException;
03  
04 import sun.misc.*;
05 /**
06  * 通过这个类实现利用base64算法进行编码和解码。
07  * @author
08  *
09  */
10 public class Base64 {
11      
12     @SuppressWarnings("restriction")
13     public String encode(String toEncodeContent){
14         if(toEncodeContent == null){
15             return null;
16         }
17         BASE64Encoder encoder = new BASE64Encoder();
18         return encoder.encode(toEncodeContent.getBytes());
19     }
20      
21     public String encode(byte [] toEncodeContent){
22         return encode(new String(toEncodeContent));
23     }
24      
25     @SuppressWarnings("restriction")
26     public String decode(String toDecodeContent){
27         if(toDecodeContent == null) {
28             return null;
29         }
30         byte[] buf = null;
31         try {
32             buf = new BASE64Decoder().decodeBuffer(toDecodeContent);
33         catch(IOException e){
34             e.printStackTrace();
35         } finally {
36         }
37         return new String(buf);
38     }
39 }

下面是测试代码:

01 package com.piedra.base64;
02  
03 import static org.junit.Assert.*;
04  
05 import org.junit.After;
06 import org.junit.Before;
07 import org.junit.Test;
08  
09 public class Base64Test {
10     private Base64 base64;
11      
12     @Before
13     public void init(){
14         base64 = new Base64();
15     }
16      
17     @Test
18     public void testEncode() {
19         String toEncodeContent = "I am grade to learn java.";
20         String encodedContent = base64.encode(toEncodeContent);
21         //由于要测试toEncodeContent经过BASE64编码后的字符序列。因此就直接打印,没有用Assert的方法。
22         System.out.println(encodedContent);
23     }
24  
25     @Test
26     public void testDecode() {
27         String toDecodeContent = "SSBhbSBncmFkZSB0byBsZWFybiBqYXZhLg==";
28         String decodedContent = base64.decode(toDecodeContent);
29         String expected = "I am grade to learn java.";
30         String actual = decodedContent;
31         assertEquals(expected,actual);
32     }
33  
34     @After
35     public void destroy(){
36     }
37 }

接着来看看如何使用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.

01 package com.piedra.base64;
02  
03 import java.security.MessageDigest;
04 import java.security.NoSuchAlgorithmException;
05 /**
06  * 通过这个类我们可以利用getDigest方法对我们需要加密的数据进行加密。
07  * @author
08  *
09  */
10 public class Md5 {
11      
12     /**
13      * 通过这个方法可以获得特定输入数据的文摘
14      * @param input 需要进行获取文摘的字节数组
15      * @return 特定数据的文摘
16      */
17     public byte[] getDigest(byte [] input){
18         byte [] digestedValue = null;
19         try {
20             MessageDigest md = MessageDigest.getInstance("MD5");
21             //下面两个方法相当于适用 md.digest(input);
22             md.update(input);
23             digestedValue = md.digest();
24         catch (NoSuchAlgorithmException e) {
25             e.printStackTrace();
26         }
27         return digestedValue;
28     }
29 }

md5的测试代码以及base64和md5的结合使用:

01 package com.piedra.base64;
02  
03 import org.junit.After;
04 import org.junit.Before;
05 import org.junit.Test;
06  
07 public class Md5Test {
08     private Md5 md5;
09     private Base64 base64;
10      
11     @Before
12     public void init(){
13         md5 = new Md5();
14         base64 = new Base64();
15     }
16      
17     @Test
18     public void testGetDigest() {
19         String toDigest = "just a test.";
20         byte [] digestedValue = md5.getDigest(toDigest.getBytes());
21         System.out.println(new String(digestedValue));
22     }
23      
24     @Test
25     public void testEncrypt(){
26         String toEncrypt = "This is my password.";
27         byte [] encrypted = md5.getDigest(toEncrypt.getBytes());
28         String encodedPassword = base64.encode(encrypted);
29         System.out.println(encodedPassword);
30     }
31      
32     @After
33     public void destroy(){
34     }
35 }

为什么用md5算法加密后又要利用base64算法进行编码:因为md5加密后得到的数据是128位的字节数组,将字节数组用base64算法加密后得到的是字符串,这样有利于在其在数据库中的存储。

 
分享到:
评论

相关推荐

    MD5 BASE64实现QQ密码加密函数vb示例.rar

    其实也很简单,就是MD5 BASE64,要问16还是32的MD5,其实是32的,只不过加密后的32位长的字符串要把他看成另一个字符串的HEX,然后将那个字符串用BASE64编码下,关键是VB里那个字符串会显示为"???",就是乱码,请...

    php MD5 base64 crypt等加密函数用法集.rar

    包括了MD5 base64 crypt Sha1等。一些用法说明如下:  var_dump(md5('zxcasd',$raw_output=true)); //raw_output为可选参数如果被设置为true那么MD5报文摘要将以16字节长度的原始二进制格式返回  echo crypt('...

    MD5BASE64加密支持中文汉字

    MD5BASE64加密,支持中文汉字加密,delphi xe10.2编译,低版本程序没有测试,开发中通快递电子面单时用的这个来签名的,结果可去验证http://58.40.16.125:9001/digesttool/

    数据md5转base64加密

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

    纯c MD5和base64代码

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

    IOS加密代码 ase md5 base64

    在这个主题中,我们将深入探讨三种常用的加密技术:AES(Advanced Encryption Standard)、MD5(Message-Digest Algorithm 5)以及Base64。 **AES加密** AES,即高级加密标准,是一种块密码,它以其高效和安全性而...

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

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

    Base64+MD5 util

    Base64和MD5是两种在信息技术领域广泛应用的编码和哈希算法。它们在数据处理、信息安全和网络通信中起到至关重要的作用。 首先,我们来理解Base64。Base64是一种将二进制数据转化为可打印字符的编码方式,主要用于...

    js实现Md5 Base64 Sha256加密

    MD5、Base64和SHA-256是三种常见的加密算法,它们在JavaScript中都有对应的实现。 **MD5(Message-Digest Algorithm 5)** MD5是一种广泛使用的哈希函数,能够将任意长度的数据转化为固定长度的128位(16字节)摘要...

    Android AES、MD5、Base64、URLEncode加密

    Android AES、MD5、Base64、URLEncode加密 org.apache.commons.codec.binary.Base64; 代替sun.misc.BASE64Encoder sun.misc.BASE64Encoder

    md5 base64 guid crc16

    md5字符串加密 生成guid唯一随机字符串 base64字符串加解密 文件crc16校验值 示例: Option Explicit Private Declare Function MD5String Lib "CommonFunc.dll" (ByVal s As String) As String Private Declare ...

    MD5 、base64加密技术

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

    加密方法(base64,md5,sha1)

    此文件包含了base64加密方法/md5及sha1加密方法,应用于前端账户安全加密

    md5 base64 sha256加密原生js(含中文加密).zip

    使用方法 sha256_digest("weyckart年胜多负少123111...."); md5("weyckart年胜多负少123111...."); Base64.toBase64("weyckart年胜多负少123111....");

    Delphi MD5+Base64加密与JAVA .NET一样

    MD5和Base64是两种常见的数据编码和加密技术,它们在软件开发中扮演着重要的角色,尤其是在确保数据安全性和一致性方面。在Delphi、Java和.NET这些编程环境中,实现MD5和Base64的加密过程是类似的,使得跨平台的数据...

    java加密工具类 md5 aes base64 urlencode

    加密工具类 包含md5加密 base加密解密 md5加密 aes加密解密 urlencoude

    Base64加密、MD5加密

    Base64和MD5是两种在信息技术领域广泛应用的加密与编码技术。Base64主要用于将二进制数据转换为可打印的字符格式,而MD5则是一种常用的哈希函数,用于数据的校验和安全存储。 Base64是一种编码方式,它将任意长度的...

    base64MD5加密文件工具

    在IT领域,安全性和隐私保护是至关重要的,这就引出了我们今天的话题——“base64MD5加密文件工具”。这个工具结合了两种常见的哈希和编码技术:Base64编码和MD5散列函数,用于增强数据的安全性。这两种技术在不同的...

    SHA1加密,MD5加密,base64加解密的C++实现类

    本文将详细介绍C++中SHA1、MD5和Base64加解密算法的实现及其原理。这些技术广泛应用于密码存储、数据完整性验证以及网络传输中。 首先,SHA1(Secure Hash Algorithm 1)是一种哈希函数,它接受任意长度的数据输入...

    js加密算法3des和md5-base64和常用工具

    本文将深入探讨三种常见的加密算法:3DES、MD5以及Base64,并介绍它们在实际应用中的工具和用途。 首先,我们来了解一下3DES(Triple DES,三重数据加密标准)。3DES是一种对称加密算法,它是DES(Data Encryption ...

Global site tag (gtag.js) - Google Analytics