建设银行对接(二)

对发送的数据进行数据加密

发送数据时需要加密,首先是MD5加密,然后将加密结果按照附录1进行转换,参看“建设银行附录(一)”。

下面是MD5Encoder.java

package cn.ipanel.payment.business.bank.ccb.encryption;

 

import java.security.MessageDigest;

 

/**

 * MD5加密解密工具类<br>

 *

 *

 * 关于MD5的算法请参考RFC1321规范<br>

 * RFC1321给出了Test suite用来检验你的实现是否正确:<br>

 * MD5 ("") =d41d8cd98f00b204e9800998ecf8427e <br>

 * MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661<br>

 * MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72<br>

 * MD5 ("message digest") =f96b697d7cb7938d525a2f31aaf161d0<br>

 * MD5 ("abcdefghijklmnopqrstuvwxyz") =c3fcd3d76192e4007dfb496cca67e13b

 *

 * @author wangxiaoxue

 *

 * 传入参数:一个字节数组 传出参数:字节数组的 MD5 结果字符串

 */

public class MD5Encoder {

 

    /**

     * 对二进制数组进行MD5算法加密,并将加密结果按照建行的协议算法进行转换

     * @param source

     * @return

     */

    public static byte[] encode(byte[] source) {

       byte[] result = new byte[0];

 

       try {

           MessageDigest md = MessageDigest.getInstance("MD5");

           md.update(source);

 

           // MD5 的计算结果是一个 128 位的长整数,用字节表示就是 16 个字节

           result = md.digest();

 

       } catch (Exception e) {

           e.printStackTrace();

       }

       return result;

    }

 

    public static void main(String xu[]) { // 计算 "a" MD5

       // 代码,应该为:0cc175b9c0f1b6a831c399e269772661

       System.out.println(ByteUtil.byteToChar(MD5Encoder.encode("".getBytes())));

    }

 

}

 

 

 

为了以后项目的扩展性,写了一个基础加密解密类,Encoder.java,代码如下:

还写了一个基础加密类

 

package cn.ipanel.payment.business.bank.ccb.encryption;

 

import java.security.MessageDigest;  

 

import javax.crypto.KeyGenerator;  

import javax.crypto.Mac;  

import javax.crypto.SecretKey;  

import javax.crypto.spec.SecretKeySpec;

 

import sun.misc.BASE64Decoder;  

import sun.misc.BASE64Encoder;  

 

/**

 * 基础加密模块

 * @author wangxiaoxue

 *

 */

public abstract class Encoder {  

    public static final String KEY_SHA = "SHA";  

    public static final String KEY_MD5 = "MD5";  

 

    /** 

     * MAC算法可选以下多种算法 

     *  

     * <pre> 

     * HmacMD5  

     * HmacSHA1  

     * HmacSHA256  

     * HmacSHA384  

     * HmacSHA512 

     * </pre> 

     */ 

    public static final String KEY_MAC = "HmacMD5";  

 

    /** 

     * BASE64解密 

     *  

     * @param key 

     * @return 

     * @throws Exception 

     */ 

    public static byte[] decryptBASE64(String key) throws Exception {  

        return (new BASE64Decoder()).decodeBuffer(key);  

    }  

 

    /** 

     * BASE64加密 

     *  

     * @param key 

     * @return 

     * @throws Exception 

     */ 

    public static String encryptBASE64(byte[] key) throws Exception {  

        return (new BASE64Encoder()).encodeBuffer(key);  

    }  

 

    /** 

     * MD5加密 

     *  

     * @param data 

     * @return 

     * @throws Exception 

     */ 

    public static byte[] encryptMD5(byte[] data) throws Exception {  

 

        MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);  

        md5.update(data);  

 

        return md5.digest();  

 

    }  

 

    /** 

     * SHA加密 

     *  

     * @param data 

     * @return 

     * @throws Exception 

     */ 

    public static byte[] encryptSHA(byte[] data) throws Exception {  

 

        MessageDigest sha = MessageDigest.getInstance(KEY_SHA);  

        sha.update(data);  

 

        return sha.digest();  

 

    }  

 

    /** 

     * 初始化HMAC密钥 

     *   

     * @return 

     * @throws Exception 

     */ 

    public static String initMacKey() throws Exception {  

        KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);  

 

        SecretKey secretKey = keyGenerator.generateKey();  

        return encryptBASE64(secretKey.getEncoded());  

    }  

 

    /** 

     * HMAC加密 

     *  

     * @param data 

     * @param key 

     * @return 

     * @throws Exception 

     */ 

    public static byte[] encryptHMAC(byte[] data, String key) throws Exception {  

 

        SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);  

        Mac mac = Mac.getInstance(secretKey.getAlgorithm());  

        mac.init(secretKey);  

 

        return mac.doFinal(data);  

 

    }  

} 

 

你可能感兴趣的:(算法,Security,sun)