Json是一種輕量級(jí)的數(shù)據(jù)交換格式,常用于前后端數(shù)據(jù)的傳遞。為了保護(hù)數(shù)據(jù)的安全性,我們可能需要在傳輸過程中對(duì)Json字符串進(jìn)行加密。而在Java中,我們可以使用多種加密算法來實(shí)現(xiàn)Json字符串的加密。
一種常用的加密算法是AES對(duì)稱加密。我們可以使用javax.crypto包下的Cipher類來實(shí)現(xiàn)AES加密。以下是一個(gè)示例:
import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class AesEncryptor { // 密鑰長(zhǎng)度必須為16、24或32個(gè)字符 private static final byte[] KEY = "1234567812345678".getBytes(); private static final String ALGORITHM = "AES/ECB/PKCS5Padding"; public static String encrypt(String json) throws Exception { Cipher cipher = Cipher.getInstance(ALGORITHM); SecretKeySpec keySpec = new SecretKeySpec(KEY, "AES"); cipher.init(Cipher.ENCRYPT_MODE, keySpec); byte[] encrypted = cipher.doFinal(json.getBytes()); return Base64.getEncoder().encodeToString(encrypted); } public static String decrypt(String encryptedJson) throws Exception { Cipher cipher = Cipher.getInstance(ALGORITHM); SecretKeySpec keySpec = new SecretKeySpec(KEY, "AES"); cipher.init(Cipher.DECRYPT_MODE, keySpec); byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(encryptedJson)); return new String(decrypted); } }
上述代碼中,我們使用了ECB模式和PKCS5Padding填充。這里的密鑰長(zhǎng)度為16個(gè)字符。注意,ECB模式存在安全問題,因此在實(shí)際使用中應(yīng)該使用更加安全的CBC模式。
加密后的Json字符串可以使用Base64編碼進(jìn)行傳輸。在前端接收到數(shù)據(jù)后,可以使用相同的密鑰和算法進(jìn)行解密。以下是解密示例:
var encryptedJson = "U2FsdGVkX1+g/x...kH"; var decryptedJson = ""; $.ajax({ url: "/decrypt", type: "POST", data: { json: encryptedJson }, success: function(data) { decryptedJson = data; // 處理解密后的Json字符串 } });
通過上述方式,我們可以保證Json字符串在傳輸過程中的安全性。