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

01package com.piedra.base64;
02import java.io.IOException;
03 
04import 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算法加密后得到的是字符串,这样有利于在其在数据库中的存储。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP是一种SAP开发语言,其在企业级应用的开发和运行中发挥着不可替代的作用。在实际的开发和业务流程中,数据的加密与保护是非常重要的,因此在ABAP的开发中,MD5Base64算法的应用也变得越来越广泛。 MD5是一种常见的加密算法,可以将任意长度的消息摘要成固定长度的128位数据,具有不可逆转的特点,因此对于数据的保护有着非常好的效果。在ABAP中,可以通过使用Function module “SSFC_STRING_HASH”实现MD5加密,具体操作如下: 1.需要使用IMPORT参数algorithm(值为’MD5’) 2.调用函数时,需要将需要加密的消息传递给EXPORT变量“hashval”,这个变量的类型是RAW,或者是CHAR,长度为16。 示例代码如下: DATA: lv_text TYPE string VALUE 'ABAP MD5加密', lv_algo TYPE ssfc_apps_algo_md5, lv_hash TYPE ssfc_raw16. lv_algo = 'MD5'. CALL FUNCTION 'SSFC_STRING_HASH' EXPORTING algorithm = lv_algo string = lv_text IMPORTING hashval = lv_hash. 在得到MD5值之后,可以将其与Base64加密算法结合使用,对数据进行进一步保护和传输。Base64编码可以将二进制数据转化成一种可读性很高的ASCII字符组合,具有不可逆的特征,因此在传输数据中的广泛应用非常必要。 在ABAP中,可以通过使用Function module “SCMS_BASE64_ENCODE_STR”的方法实现Base64编码,将加密后的数据转换成可读性更高的字符创类型数据传输出去,具体操作如下: 示例代码如下: DATA: lv_base64 TYPE string. CALL FUNCTION 'SCMS_BASE64_ENCODE_STR' EXPORTING text = lv_hash IMPORTING b64 = lv_base64. 可以看到,在ABAP的开发中,MD5Base64加密算法的应用,可以更好地保护数据,保障企业的信息安全,在实际开发中具有非常重要的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值