利用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; |
12 |
@SuppressWarnings( "restriction" )
|
13 |
public String encode(String toEncodeContent){
|
14 |
if (toEncodeContent == null){
|
17 |
BASE64Encoder encoder = new BASE64Encoder();
|
18 |
return encoder.encode(toEncodeContent.getBytes());
|
21 |
public String encode(byte [] toEncodeContent){
|
22 |
return encode( new String(toEncodeContent));
|
25 |
@SuppressWarnings( "restriction" )
|
26 |
public String decode(String toDecodeContent){
|
27 |
if (toDecodeContent == null) {
|
32 |
buf = new BASE64Decoder().decodeBuffer(toDecodeContent);
|
33 |
} catch (IOException e){
|
37 |
return new String(buf);
|
下面是测试代码:
01 |
package com.piedra.base64;
|
03 |
import static org.junit.Assert.*;
|
05 |
import org.junit.After;
|
06 |
import org.junit.Before;
|
07 |
import org.junit.Test;
|
09 |
public class Base64Test {
|
10 |
private Base64 base64;
|
14 |
base64 = new Base64();
|
18 |
public void testEncode() {
|
19 |
String toEncodeContent = "I am grade to learn java." ;
|
20 |
String encodedContent = base64.encode(toEncodeContent);
|
22 |
System.out.println(encodedContent);
|
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);
|
35 |
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.
01 |
package com.piedra.base64;
|
03 |
import java.security.MessageDigest;
|
04 |
import java.security.NoSuchAlgorithmException;
|
06 |
* 通过这个类我们可以利用getDigest方法对我们需要加密的数据进行加密。
|
14 |
* @param input 需要进行获取文摘的字节数组
|
17 |
public byte [] getDigest( byte [] input){
|
18 |
byte [] digestedValue = null ;
|
20 |
MessageDigest md = MessageDigest.getInstance( "MD5" );
|
23 |
digestedValue = md.digest();
|
24 |
} catch (NoSuchAlgorithmException e) {
|
md5的测试代码以及base64和md5的结合使用:
01 |
package com.piedra.base64;
|
03 |
import org.junit.After;
|
04 |
import org.junit.Before;
|
05 |
import org.junit.Test;
|
07 |
public class Md5Test {
|
09 |
private Base64 base64;
|
14 |
base64 = new Base64();
|
18 |
public void testGetDigest() {
|
19 |
String toDigest = "just a test." ;
|
20 |
byte [] digestedValue = md5.getDigest(toDigest.getBytes());
|
21 |
System.out.println( new String(digestedValue));
|
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);
|
33 |
public void destroy(){
|
为什么用md5算法加密后又要利用base64算法进行编码:因为md5加密后得到的数据是128位的字节数组,将字节数组用base64算法加密后得到的是字符串,这样有利于在其在数据库中的存储。
分享到:
相关推荐
其实也很简单,就是MD5 BASE64,要问16还是32的MD5,其实是32的,只不过加密后的32位长的字符串要把他看成另一个字符串的HEX,然后将那个字符串用BASE64编码下,关键是VB里那个字符串会显示为"???",就是乱码,请...
包括了MD5 base64 crypt Sha1等。一些用法说明如下: var_dump(md5('zxcasd',$raw_output=true)); //raw_output为可选参数如果被设置为true那么MD5报文摘要将以16字节长度的原始二进制格式返回 echo crypt('...
MD5BASE64加密,支持中文汉字加密,delphi xe10.2编译,低版本程序没有测试,开发中通快递电子面单时用的这个来签名的,结果可去验证http://58.40.16.125:9001/digesttool/
Java后台用于对数据md5转base64加密处理的一个方法封装。简单的一个加密解密的封装,初学者用,大神勿喷
MD5和Base64是两种在信息技术领域广泛使用的编码技术,它们各有其特定的应用场景和功能。 MD5,全称为Message-Digest Algorithm 5,是一种广泛使用的哈希函数,能够将任意长度的数据转换为固定长度的摘要(通常为...
在这个主题中,我们将深入探讨三种常用的加密技术:AES(Advanced Encryption Standard)、MD5(Message-Digest Algorithm 5)以及Base64。 **AES加密** AES,即高级加密标准,是一种块密码,它以其高效和安全性而...
在SQL Server 2005中,开发人员经常需要处理数据加密和编码转换,例如Base64、MD5和SHA1。这些算法在数据库安全、数据验证和信息完整性方面起着重要作用。本篇文章将详细介绍如何在SQL Server 2005环境下轻松实现这...
Base64和MD5是两种在信息技术领域广泛应用的编码和哈希算法。它们在数据处理、信息安全和网络通信中起到至关重要的作用。 首先,我们来理解Base64。Base64是一种将二进制数据转化为可打印字符的编码方式,主要用于...
MD5、Base64和SHA-256是三种常见的加密算法,它们在JavaScript中都有对应的实现。 **MD5(Message-Digest Algorithm 5)** MD5是一种广泛使用的哈希函数,能够将任意长度的数据转化为固定长度的128位(16字节)摘要...
Android AES、MD5、Base64、URLEncode加密 org.apache.commons.codec.binary.Base64; 代替sun.misc.BASE64Encoder sun.misc.BASE64Encoder
md5字符串加密 生成guid唯一随机字符串 base64字符串加解密 文件crc16校验值 示例: Option Explicit Private Declare Function MD5String Lib "CommonFunc.dll" (ByVal s As String) As String Private Declare ...
结合【标签】"MD5 Base64",我们可以推断出这款小葵软件具备两个主要特性:一是支持Base64编码的解密,二是能进行MD5哈希计算。这两个功能对于IT从业者来说非常实用,尤其是处理数据编码与安全验证时。 在【压缩...
MD5和Base64是两种在信息技术领域广泛使用的编码与加密技术,它们各自有其特点和应用场景。 MD5,全称Message-Digest Algorithm 5,是一种广泛使用的哈希函数,可以将任意长度的信息转化为固定长度的摘要(通常为...
此文件包含了base64加密方法/md5及sha1加密方法,应用于前端账户安全加密
使用方法 sha256_digest("weyckart年胜多负少123111...."); md5("weyckart年胜多负少123111...."); Base64.toBase64("weyckart年胜多负少123111....");
MD5和Base64是两种常见的数据编码和加密技术,它们在软件开发中扮演着重要的角色,尤其是在确保数据安全性和一致性方面。在Delphi、Java和.NET这些编程环境中,实现MD5和Base64的加密过程是类似的,使得跨平台的数据...
加密工具类 包含md5加密 base加密解密 md5加密 aes加密解密 urlencoude
Base64和MD5是两种在信息技术领域广泛应用的加密与编码技术。Base64主要用于将二进制数据转换为可打印的字符格式,而MD5则是一种常用的哈希函数,用于数据的校验和安全存储。 Base64是一种编码方式,它将任意长度的...
在IT领域,安全性和隐私保护是至关重要的,这就引出了我们今天的话题——“base64MD5加密文件工具”。这个工具结合了两种常见的哈希和编码技术:Base64编码和MD5散列函数,用于增强数据的安全性。这两种技术在不同的...
本文将详细介绍C++中SHA1、MD5和Base64加解密算法的实现及其原理。这些技术广泛应用于密码存储、数据完整性验证以及网络传输中。 首先,SHA1(Secure Hash Algorithm 1)是一种哈希函数,它接受任意长度的数据输入...