- 前端安装crypto包: npm install crypto-js
- 前端封装crypto.js文件:
import CryptoJS from 'crypto-js';
const key = CryptoJS.enc.Utf8.parse('1111111111111111');
const iv = CryptoJS.enc.Utf8.parse('key_111111111111');
const crypto = {
Decrypt(text) {
const encrypted = CryptoJS.AES.decrypt(text, key, {
iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString(CryptoJS.enc.Utf8);
},
Encrypt(text) {
const encrypted = CryptoJS.AES.encrypt(text, key, {
iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
}
};
export default crypto;
- 后端加密和解密方法
private static final String ENCODING = "UTF-8";
private static final String AES_ALGORITHM = "AES";
private static final String CIPHER_CBC_PADDING = "AES/CBC/PKCS5Padding";
private static final String aesKey = "1111111111111111";
private static final String ivSeed = "key_111111111111";
public static String decryptCbc(String text) {
try {
byte[] bytes = aesKey.getBytes(ENCODING);
SecretKeySpec skeySpec = new SecretKeySpec(bytes, AES_ALGORITHM);
IvParameterSpec iv = new IvParameterSpec(ivSeed.getBytes(ENCODING));
Cipher cipher = Cipher.getInstance(CIPHER_CBC_PADDING);
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] decodeBase64 = Base64.decodeBase64(text);
byte[] decrypted = cipher.doFinal(decodeBase64);
return new String(decrypted, ENCODING);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static String encryptCbc(String text) {
try {
byte[] bytes = aesKey.getBytes(ENCODING);
SecretKeySpec skeySpec = new SecretKeySpec(bytes, AES_ALGORITHM);
Cipher cipher = Cipher.getInstance(CIPHER_CBC_PADDING);
IvParameterSpec iv = new IvParameterSpec(ivSeed.getBytes(ENCODING));
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(text.getBytes(ENCODING));
return Base64.encodeBase64String(encrypted);
} catch (Exception e) {
throw new RuntimeException(e);
}
}