前端使用CryptoJS
下载CryptoJS, Github : https://github.com/brix/crypto-js
一、使用CBC模式
1、前端实现
引入JS
<script src="./js/crypto-js.js"></script>
<script src="./js/aes.js"></script>
<script>
var key = '3132333435363738393041424344454631323334353637383930414243444566';
console.log('密钥:', key);
key = CryptoJS.enc.Hex.parse(key)
iv = CryptoJS.enc.Hex.parse("30313233343536373839414243444546")
var src = "werty7890";
console.log('原字符串:', src);
var enc = CryptoJS.AES.encrypt(src ,key,{
iv:iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
//console.log('加密:',enc.toString());
var enced = enc.ciphertext.toString()
console.log("加密:", enced);
var dec = CryptoJS.AES.decrypt(CryptoJS.format.Hex.parse(enced), key,{
iv:iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
console.log('解密:',CryptoJS.enc.Utf8.stringify(dec));
</script>
结果:
2、后端Java实现
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class AES {
private static String iv = "0123456789ABCDEF";//偏移量字符串必须是16位 当模式是CBC的时候必须设置偏移量
private static String Algorithm = "AES";
private static String AlgorithmProvider = "AES/CBC/PKCS5Padding"; //算法/模式/补码方式
public static byte[] generatorKey() throws NoSuchAlgorithmException {
KeyGenerator keyGenerator = KeyGenerator.getInstance(Algorithm);
keyGenerator.init(256);//默认128,获得无政策权限后可为192或256
Se