AES加密设置配置问题,加密后的格式是大小写字母 百分号 没等号,没沟通好,encodeURI出来的%,终结

package cn.chinaunicom.changyue.util;

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

import org.apache.commons.lang.StringUtils;

/**
 * 类 名: AES<br/>
 * 描 述: AES加解密类<br/>
 * 作 者: 郭昕<br/>
 * 创 建: 2013-6-25<br/>
 *
 * 历 史: (版本) 作者 时间 注释
 */
public class AESUtils {

    /** 加密算法 */
    public static final String ALGORITHM = "AES";

    /** ECB加密模式 */
    public static final String PATTERN_ECB = "ECB";

    /** CBC加密模式 */
    public static final String PATTERN_CBC = "CBC";

    /** PKCS5Padding填充方式 */
    public static final String PADDING_PKCS5 = "PKCS5Padding";

    public static final String key = "Ft08QZ9fsFUm1meK";
    public static final String sp = "Fa08QZ9fsFUm1meK";

    /**
     * 描述:加密
     *
     * @return
     * @throws Exception
     */
    public static String encrypt(String original) throws Exception {
        if (StringUtils.isEmpty(original)) {
            return null;
        }
        Cipher cipher = null;
        SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), ALGORITHM);
        cipher = Cipher.getInstance(ALGORITHM + "/" + PATTERN_CBC + "/" + PADDING_PKCS5);
        IvParameterSpec iv = new IvParameterSpec(sp.getBytes("UTF-8"));// 使用CBC模式,需要一个向量iv,可增加加密算法的强度
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        return Base64.encode(cipher.doFinal(original.getBytes("utf-8")));
    }

    public static String decrypt(String encrypted) throws Exception {

        if (StringUtils.isEmpty(encrypted)) {
            return null;
        }
        Cipher cipher = null;
        SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("utf-8"), ALGORITHM);
        cipher = Cipher.getInstance(ALGORITHM + "/" + PATTERN_CBC + "/" + PADDING_PKCS5);
        IvParameterSpec iv = new IvParameterSpec(sp.getBytes("utf-8"));// 使用CBC模式,需要一个向量iv,可增加加密算法的强度
        cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
        byte[] byteDecrypted = cipher.doFinal(Base64.decode(encrypted));
        return new String(byteDecrypted, "utf-8").trim();
    }

    public static void main(String[] args) throws Exception {
        String vi = "Fa08QZ9fsFUm1meK";
        String string = AESUtils.encrypt("15620587360");
        System.out.println(string);
        String string2 = AESUtils.decrypt(string);
        System.out.println(string2);
    }
}

加密后的格式是有%,没有等号的,这个在js里如何配置

上网找的js的AES加解密,试了半天不知如何配置

var key = CryptoJS.enc.Utf8.parse("Ft08QZ9fsFUm1meK");
    var iv = CryptoJS.enc.Utf8.parse('Fa08QZ9fsFUm1meK');
    function Encrypt(word) {
        srcs = CryptoJS.enc.Utf8.parse(word);
        var encrypted = CryptoJS.AES.encrypt(srcs, key, {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});
        return encrypted.ciphertext.toString().toUpperCase();
    }
    function Decrypt(word) {
        var encryptedHexStr = CryptoJS.enc.Hex.parse(word);
        var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
        var decrypt = CryptoJS.AES.decrypt(srcs, key, {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7});
        var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
        return decryptedStr.toString();
    }
    var mm = Encrypt('18634332463')
    console.log(mm);
    var jm = Decrypt(mm);
    console.log(jm)

后台又告知是通过encodeURI在有的%,被坑了,怎么删除问题...

阅读 5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题