Base 64およびMd 5の使用


md 5およびbase 64を用いてjavaアプリケーションにおける機密データの暗号化および符号化を行う.1.ウィキペディアにおけるmd 5およびbase 64の定義:情報伝送が完全に一貫していることを保証するMD 5、すなわちMessage-Digest Algorithm 5(情報-要約アルゴリズム5)である.コンピュータで広く使用されているコンパクトアルゴリズムの1つ(要約アルゴリズム、ハッシュアルゴリズム)であり、主流のプログラミング言語ではMD 5が一般的に実現されている.データ(例えば漢字)を別の固定長値に演算することは、コンパクトアルゴリズムの基礎原理であり、MD 5の前身にはMD 2、MD 3、MD 4がある.md 5演算結果は、固定長128ビットのバイナリ数であり、一連の演算により32個の16進数が得られる.Base 64は、64ベースを用いた位置カウント法である.印刷可能なASCII文字のみを表すには、2の最大次数を使用します.これにより、電子メールの伝送符号化に使用できます.Base 64の変数には、文字A−Z、a−z、および0−9が使用され、これにより、62文字が始まりの64個の数字として使用され、最後の2つの数字として使用される記号は、異なるシステムにおいて異なる.uuencodeのようないくつかの他の符号化方法、およびその後のbinhexのバージョンは、6つのバイナリ数字を表すために異なる64文字セットを使用するが、Base 64とは呼ばない.base 64アルゴリズムはウィキペディアの例でよく詳しく話しています.   link:   md5   http://zh.wikipedia.org/wiki/MD5         base64   http://zh.wikipedia.org/wiki/Base642.base 64とmd 5アルゴリズムの使い方をコード形式で説明します(他の方法や比較的良い使い方があれば、同胞たちに教えてほしいです.まだ実際に働いたことがないので、先にありがとうございます.)注意: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(){
	}
}

次にmd 5アルゴリズムを用いて暗号化する方法を見てみる: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;
	}
}

md 5のテストコードとbase 64とmd 5の組み合わせの使用:
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(){
	}
}

なぜmd 5アルゴリズムで暗号化した後にbase 64アルゴリズムを利用して符号化するのか:md 5暗号化した後に得られたデータは128ビットのバイト配列であるため、バイト配列をbase 64アルゴリズムで暗号化した後に得られたのは文字列であり、データベースでの記憶に有利である.(注:私のプロジェクトのコンパイル環境はJDK 1.6で、実行環境はJDK 1.7です).