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

发布于 2022-09-06 22:23:26 字数 3409 浏览 30 评论 0

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在有的%,被坑了,怎么删除问题...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文