什么是AES
AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard,AES),是一种区块加密标准。
AES加密方式简介
-
AES使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据 -
AES的加密方式会将明文拆分成不同的块进行加密,例如一个256 位的数据用128的密钥加密,则分成
明文1(128)位 | 明文2(128)位 |
---|
加 | 密 | 密文1(128)位 | 密文2(128)位 |
- 模式有CBC(有向量模式)和ECB(无向量模式),向量模式可以简单理解为偏移量,使用CBC模式需要定义一个IvParameterSpec对象(偏移量)–向量必须是一个与密钥长度相等的数据
- 填充模式
java使用Cipher步骤
-
新建Cipher对象时需要传入一个参数,参数格式algorithm/mode/padding,其中algorithm为必输项 ,algorithm有`algorithm,缺省的mode为ECB,缺省的padding为PKCS5Padding–使用CBC模式时必须传入padding -
使用之前还需要初始化,,共三个参数(“加密模式或者解密模式”,“密匙”,“向量”) -
调用数据转换:cipher.doFinal(content),其中content是一个byte数组 -
案例
private static void decrypt() {
String qwe = "4001234512par1q2";
String asd = "6u7i8q1w2e3r4t5y";
String str = "eryuiouopoiportertrytrytu";
try {
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec keySpec = new SecretKeySpec(qwe.getBytes(),"AES");
IvParameterSpec iv = new IvParameterSpec(asd.getBytes());
cipher.init(Cipher.DECRYPT_MODE,keySpec,iv);
byte[] decode = Base64.getDecoder().decode(str);
byte[] bytes = cipher.doFinal(decode);
String s = new String(bytes, StandardCharsets.UTF_8);
System.out.println(s);
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidAlgorithmParameterException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException e) {
e.printStackTrace();
}
}
Js中使用Crypto
-
准备好密钥和偏移量 -
知道模式模式和填充模式,至关重要,关系到能不能解密成功和解密出来的数据是否正确 -
案例 <script>
let qwe = "4001234512par1q2";
let asd = "6u7i8q1w2e3r4t5y";
let str = "lnUsqFPjscXlHxe2";
let key = CryptoJS.enc.Utf8.parse(qwe)
let iv = CryptoJS.enc.Utf8.parse(asd)
let decrypt = CryptoJS.AES.decrypt(str,key,{
iv:iv,
mode:CryptoJS.mode.CBC,
padding:CryptoJS.pad.ZeroPadding
});
let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
console.log(JSON.parse(decryptedStr))
</script>
Postman中使用Crypto.js解密接口数据
Postman已经集成了Crypto,所以可以直接使用。再Tests里对响应写js脚本即可
参考文章
- Java使用Cipher类实现加密的过程详解
- JAVA AES加密与解密
- 前端js使用crypto-js进行aes解密,解密内容为空
- postman脚本执行顺序
- Postman JavaScript reference
|