easyclick 自定义DES加密代码

easyclick默认的DES加密,使用了默认值,所以你在php或者各其它版本将不可确定。为了兼容各平台,使用自定义des设定值。

基础知识我想前两篇文章,我做了些总结,不急着用代码可以学习一下:

java.util.Base64与android.util.Base64兼容

java.util.Base64与android.util.Base64兼容

des加密解密各平台兼容处理

这里给大家一个固定的代码,其中密码key部分你可自行修改

//importClass(android.util.Base64);
importClass(java.util.Base64);
//importClass(java.security.SecureRandom);
importClass(java.security.Key);
importClass(javax.crypto.Cipher);
importClass(javax.crypto.SecretKey);
importClass(javax.crypto.SecretKeyFactory);
importClass(javax.crypto.spec.DESKeySpec);
importClass(javax.crypto.spec.IvParameterSpec);
importClass(java.security.spec.AlgorithmParameterSpec);
//Base64.NO_WRAP 与 java.util.Base64 相同

let DES = (function () {

    let ALGORITHM_DES = "DES/CBC/PKCS5Padding";
    let IV = new IvParameterSpec(new java.lang.String("12345678").getBytes());
    function DES() {
    }
    DES.prototype.encode = function (data,key) {
        return encode(data,key);
    }
    DES.prototype.decode = function (data,key) {
        return decode(data,key);
    }
    /**
     * DES算法,加密
     *
     * @param data
     *            待加密字符串
     * @param key
     *            加密私钥,长度不能够小于8位
     * @return 加密后的字节数组,一般结合Base64编码使用
     * @throws Exception
     */
    function encode(data,key) {
        if (data == null)
            return null;
        try {
            let dks = new DESKeySpec(new java.lang.String(key.substring(0,8)).getBytes());
            let keyFactory = SecretKeyFactory.getInstance("DES");
            // key的长度不能够小于8位字节
            let secretKey = keyFactory.generateSecret(dks);
            let cipher = Cipher.getInstance(ALGORITHM_DES);
            let iv = IV;
            let paramSpec = iv; //AlgorithmParameterSpec
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec);
            let bytes = cipher.doFinal(new java.lang.String(data).getBytes()); //byte[]
            //let str=Base64.encode(bytes, Base64.NO_WRAP); //, bytes.length, 0
            let str=Base64.getEncoder().encodeToString(bytes);
            //return new java.lang.String(str);
            return str;
        } catch (e) {
            logd(e);
            return data;
        }
    }
    /**
     * DES算法,解密
     *
     * @param data
     *            待解密字符串
     * @param key
     *            解密私钥,长度不能够小于8位
     * @return 解密后的字节数组
     * @throws Exception
     *             异常
     */
    function decode(data, key) {
        if (data == null)
            return null;
        try {
            let dks = new DESKeySpec(new java.lang.String(key.substring(0,8)).getBytes());
            let keyFactory = SecretKeyFactory.getInstance("DES");
            // key的长度不能够小于8位字节
            let secretKey = keyFactory.generateSecret(dks);
            let cipher = Cipher.getInstance(ALGORITHM_DES);
            let iv = IV //IvParameterSpec
            let paramSpec = iv; //AlgorithmParameterSpec
            cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec);
            //return new java.lang.String(cipher.doFinal(byte2hex(data.getBytes())));
            //return new java.lang.String(cipher.doFinal(byte2hex(Base64.decode(data,0))),"UTF-8");
            //return new java.lang.String(cipher.doFinal(Base64.decode(data,Base64.NO_WRAP)));
            return new java.lang.String(cipher.doFinal(Base64.getDecoder().decode(data)));
        } catch (e) {
            //e.printStackTrace();
            logd(e);
            return data;
        }
    }
    /*
    function byte2hex(buf) {
        let sb = new StringBuffer();
        for (int i = 0; i < buf.length; i++) {
            let hex = java.lang.Integer.toHexString(buf[i] & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            sb.append(hex.toUpperCase());
        }
        return sb.toString();
    }
    */
    return DES;
})();

使用范例

let bakContent ="我是一个待加密的内容我的秘密";
let bakPwd = "fjly1234";
let desFunc=new DES();
let ee = desFunc.encode(bakContent,bakPwd)+'';
logd("加密后的数据-> "+ee);
let dd = desFunc.decode(ee,bakPwd)+'';
logd("解密后的数据-> "+dd);

完毕

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注