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在有的%,被坑了,怎么删除问题...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论