天天看點

前端 crypto-js aes 加解密 + 後端 aes 加密解密1.前端 crypto-js aes 加解密2.後端 aes 加密解密

1.前端 crypto-js aes 加解密

首先安裝crypyo-js

1.1安裝crypto-js

1.1.1使用npm安裝

npm install crypto-js --save

1.1.2直接引入js 

js資源位址  也可直接通路開源項目位址https://github.com/brix/crypto-js 自行打包

<script type="text/javascript" src="path-to/bower_components/crypto-js/crypto-js.js"></script>
<script type="text/javascript">
    var encrypted = CryptoJS.AES(...);
    var encrypted = CryptoJS.SHA256(...);
</script>
           

1.2加密方法

import CryptoJS from 'crypto-js/crypto-js'

// 預設的 KEY 與 iv 如果沒有給
const KEY = CryptoJS.enc.Utf8.parse("密鑰");
const IV = CryptoJS.enc.Utf8.parse('密鑰');
/**
 * AES加密 :字元串 key iv  傳回base64
 */
export function Encrypt(word, keyStr, ivStr) {
  let key = KEY
  let iv = IV

  if (keyStr) {
    key = CryptoJS.enc.Utf8.parse(keyStr);
    iv = CryptoJS.enc.Utf8.parse(ivStr);
  }

  let srcs = CryptoJS.enc.Utf8.parse(word);
  var encrypted = CryptoJS.AES.encrypt(srcs, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  });
  // console.log("-=-=-=-", encrypted.ciphertext)
  return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);

}
/**
 * AES 解密 :字元串 key iv  傳回base64
 *
 */
export function Decrypt(word, keyStr, ivStr) {
  let key  = KEY
  let iv = IV

  if (keyStr) {
    key = CryptoJS.enc.Utf8.parse(keyStr);
    iv = CryptoJS.enc.Utf8.parse(ivStr);
  }

  let base64 = CryptoJS.enc.Base64.parse(word);
  let src = CryptoJS.enc.Base64.stringify(base64);

  var decrypt = CryptoJS.AES.decrypt(src, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC
  });

  var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
  return decryptedStr.toString().replace(/[\r\n]/g,"");
}
           

2.後端 aes 加密解密

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

@SuppressWarnings("restriction")
public class AESUtils {
	// 編碼方式

	public static final String charset = "UTF-8";

	/**
	 * 加密
	 *
	 * @param source
	 * @param key
	 * @return
	 */
	public static String encrypt(String source, String key) {
		try {
			IvParameterSpec Iv = new IvParameterSpec(key.getBytes(charset));
			SecretKeySpec sks = new SecretKeySpec(key.getBytes(charset), "AES");
			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
			cipher.init(Cipher.ENCRYPT_MODE, sks, Iv);
			byte[] encryptedData = cipher.doFinal(source.getBytes(charset));
			return Base64.encode(encryptedData);
		} catch (Exception e) {
			System.out.println("AESUtils.encrypt():" + e.toString());
			return "";
		}
	}

	/**
	 * 解密
	 *
	 * @param encrypted
	 * @param key
	 * @return
	 */
	public static String decrypt(String encrypted, String key) {
		try {
			byte[] byteMi = Base64.decode(encrypted);
			IvParameterSpec Iv = new IvParameterSpec(key.getBytes(charset));
			SecretKeySpec sks = new SecretKeySpec(key.getBytes(charset), "AES");
			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
			cipher.init(Cipher.DECRYPT_MODE, sks, Iv);
			byte[] decryptedData = cipher.doFinal(byteMi);
			return new String(decryptedData, charset);
		} catch (Exception e) {
			System.out.println("AESUtils.decrypt():" + e.toString());
			return "";
		}
	}
}