Android工具类(Des加密解密)


import android.util.Base64;

import java.io.UnsupportedEncodingException;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * 3DES加密解密和BASE64编码解码混合使用
 */
public class ThreeDESUtils {
 
    //key必须在16位/24位/32位,下面使用的是24位,不足24位则后面余数补0填充满24位
    public static final String key="12345677654321";
    //定义加密算法,有DES、DESede(即3DES)、Blowfish
    private static final String Algorithm = "DESede";
    //如果使用DESede,默认则使用"DESede/ECB/PKCS5Padding"  ECB:电子密码本形式加密,
    // BCB:密码块链接加密
//    private static final String DES = "DESede/ECB/PKCS5Padding";
//    private static final String DES = "DESede/CBC/PKCS5Padding";
//    private static final String DES = "DESede/ECB/NoPadding";
 
 
    /**
     * 3DES加密方法
     * @param src 源数据的字节数组
     * @return
     */
    public static byte[] encryptMode(byte[] src, String key) {
        try {
            SecretKey deskey = new SecretKeySpec(build3DesKey(key), Algorithm);    //生成密钥
            Cipher c1 = Cipher.getInstance(Algorithm);    //实例化负责加密/解密的Cipher工具类
            c1.init(Cipher.ENCRYPT_MODE, deskey);    //初始化为加密模式
            return c1.doFinal(src);
        } catch (java.security.NoSuchAlgorithmException e1) {
            e1.printStackTrace();
        } catch (javax.crypto.NoSuchPaddingException e2) {
            e2.printStackTrace();
        } catch (Exception e3) {
            e3.printStackTrace();
        }
        return null;
    }
    //3DES解密
    public static byte[] decrypt(byte[] data, String key){
        try {
            SecretKey deskey = new SecretKeySpec(build3DesKey(key), Algorithm);    //生成密钥
            Cipher cipher = Cipher.getInstance(Algorithm);
            cipher.init(Cipher.DECRYPT_MODE,deskey);
            return cipher.doFinal(data);
        } catch (Exception ex) {
            //解密失败,打日志
            ex.printStackTrace();
        }
        return null;
    }
 
    /**
     *  3DES加密Base64编码处理方法
     * @param bytes 字符串转的数组
     * @param key 用于3DES加密解密的密钥
     * @return  经过3DES+Base64加密后的字符串
     */
    public static String encode3DesBase64(byte[] bytes, String key){
        byte [] base = encryptMode(bytes,key);
        return  Base64.encodeToString(base,0);
    }
 
    /**
     * 将3DES+Base64加密后的byte数组进行解密
     * @param bytes 先3DES+Base64加密后的 byte数组
     * @param key  用于3DES加密解密的密钥
     * @return 未加密前的字符串
     */
    public static String decode3DesBase64(byte[] bytes, String key){
        byte[] b = null;
        String result = null;
        try {
            b = decrypt(Base64.decode(bytes,0),key);
            result = new String(b, "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    //构建3DES密钥
    public static byte[] build3DesKey(String keyStr) throws UnsupportedEncodingException {
        byte[] key = new byte[24];    //声明一个24位的字节数组,默认里面都是0
        byte[] temp = keyStr.getBytes("UTF-8");    //将字符串转成字节数组
         /*
          * 执行数组拷贝
          * System.arraycopy(源数组,从源数组哪里开始拷贝,目标数组,拷贝多少位)
          */
        if(key.length > temp.length){
            //如果temp不够24位,则拷贝temp数组整个长度的内容到key数组中
            System.arraycopy(temp, 0, key, 0, temp.length);
        }else{
            //如果temp大于24位,则拷贝temp数组24个长度的内容到key数组中
            System.arraycopy(temp, 0, key, 0, key.length);
        }
        return key;
    }
}

 

 

//JS使用  javascript应该没用到crypto-js.js就可以了

  <script type="text/javascript"  src="js/crypto-js.js" charset="UTF-8"></script>
  <script type="text/javascript"  src="js/jsencrypt.js" charset="UTF-8"></script>

				function encrypt(textStr) {
					var key = "THISISAKEY";
					//key不足24位自动以0(最小位数是0)补齐,如果多余24位,则截取前24位,后面多余则舍弃掉
					var base64 = CryptoJS.enc.Utf8.parse(key)
				    var encrypt = CryptoJS.TripleDES.encrypt(textStr, base64, {
				            //iv: CryptoJS.enc.Utf8.parse('01234567'),//iv偏移量
				            //mode: CryptoJS.mode.CBC,  //CBC模式
				            mode: CryptoJS.mode.ECB,  //ECB模式
				            padding: CryptoJS.pad.Pkcs7//padding处理
				        }
				    );
				     encryptData = encrypt.toString();//加密完成后,转换成字符串
				          
				    return encryptData;
				}




//解密
function decrypt(textStr , key) {
	//key不足24位自动以0(最小位数是0)补齐,如果多余24位,则截取前24位,后面多余则舍弃掉
	var base64 = CryptoJS.enc.Utf8.parse(key)
	var decrypt = CryptoJS.TripleDES.decrypt(textStr, base64, {
			//iv: CryptoJS.enc.Utf8.parse('01234567'),//iv偏移量
			//mode: CryptoJS.mode.CBC,  //CBC模式
			mode: CryptoJS.mode.ECB,  //ECB模式
			padding: CryptoJS.pad.Pkcs7//padding处理
		}
	);
	 //decryptData = decrypt.toString();
	  return decrypt.toString(CryptoJS.enc.Utf8);
}

				

	    /**
	     * Shortcut functions to the cipher's object interface.
	     *
	     * @example
	     *
	     *     var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);
	     *     var plaintext  = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);
	     */

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值