1. 程式人生 > >SpringBoot前後端資料傳輸加密

SpringBoot前後端資料傳輸加密

採用的演算法為AES演算法

1. 編寫加密工具類

package com.pibigstar.utils;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;

/**
 * 前後端資料傳輸加密工具類
 * @author pibigstar
 *
 */
public class AesEncryptUtils {
    //可配置到Constant中,並讀取配置檔案注入
private static final String KEY = "abcdef0123456789"; //引數分別代表 演算法名稱/加密模式/資料填充方式 private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding"; /** * 加密 * @param content 加密的字串 * @param encryptKey key值 * @return * @throws Exception */ public static String encrypt
(String content, String encryptKey) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128); Cipher cipher = Cipher.getInstance(ALGORITHMSTR); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES")); byte
[] b = cipher.doFinal(content.getBytes("utf-8")); return Base64.encodeBase64String(b); } /** * 解密 * @param encryptStr 解密的字串 * @param decryptKey 解密的key值 * @return * @throws Exception */ public static String decrypt(String encryptStr, String decryptKey) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128); Cipher cipher = Cipher.getInstance(ALGORITHMSTR); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES")); byte[] encryptBytes = Base64.decodeBase64(encryptStr); byte[] decryptBytes = cipher.doFinal(encryptBytes); return new String(decryptBytes); } public static String encrypt(String content) throws Exception { return encrypt(content, KEY); } public static String decrypt(String encryptStr) throws Exception { return decrypt(encryptStr, KEY); } public static void main(String[] args) throws Exception { String content = "派大星"; System.out.println("加密前:" + content); String encrypt = encrypt(content, KEY); System.out.println("加密後:" + encrypt); String decrypt = decrypt(encrypt, KEY); System.out.println("解密後:" + decrypt); } }

2. 前端

匯入 js 檔案

    <script type="text/javascript" src = "js/aes.js"></script>
    <script type="text/javascript" src = "js/pad-zeropadding.js"></script>
    <script type="text/javascript" src = "js/security.js"></script>

傳送資料

function sendData() {
        alert("傳送的資料:"+Encrypt(JSON.stringify({name:"派大星"})));
        $.ajax({
            type: "POST",
            url:"/save",
            data:Encrypt(JSON.stringify({name:"派大星"})),
            dataType:'json',
            contentType: "application/json",
            success: function(resData) {
                alert("返回的資料:"+resData);
                alert("解密之後:"+Decrypt(resData));
                alert("解密之後轉json物件:"+JSON.parse(Decrypt(resData)).name);
            }
        }); 
    }