前后端数据加密传输,crypto前端加密后端解密 js+java
前端页面引用js,注意引用顺序否则可能会报错。 script typetext/javascript src${ctx!}/static/js/crypto-js.js/script script typetext/javascript src${ctx!}/static/js/aes.js/script script typetext/javascript src${ctx!}/static/js/pad-zeropadding.js/script 在js中写加密方法 function encrypt(data) { var key CryptoJS.enc.Latin1.parse(crypt********key); var iv CryptoJS.enc.Latin1.parse(crypt********-iv); return CryptoJS.AES.encrypt(data, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding }).toString(); }后端javapackage com.******.**.util; import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public class AesEncryptUtils { //使用AES-128-CBC加密模式key需要为16位,key和iv可以相同与前端的一样 private static String KEY crypt********key; private static String IV crypty********-iv; /** * 加密方法 * param data 要加密的数据 * param key 加密key * param iv 加密iv * return 加密的结果 * throws Exception */ public static String encrypt(String data, String key, String iv) throws Exception { try { Cipher cipher Cipher.getInstance(AES/CBC/NoPadding);//算法/模式/补码方式 int blockSize cipher.getBlockSize(); byte[] dataBytes data.getBytes(); int plaintextLength dataBytes.length; if (plaintextLength % blockSize ! 0) { plaintextLength plaintextLength (blockSize - (plaintextLength % blockSize)); } byte[] plaintext new byte[plaintextLength]; System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length); SecretKeySpec keyspec new SecretKeySpec(key.getBytes(), AES); IvParameterSpec ivspec new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); byte[] encrypted cipher.doFinal(plaintext); return new Base64().encodeToString(encrypted); } catch (Exception e) { e.printStackTrace(); return null; } } /** * 解密方法 * param data 要解密的数据 * param key 解密key * param iv 解密iv * return 解密的结果 * throws Exception */ public static String desEncrypt(String data, String key, String iv) throws Exception { try { byte[] encrypted1 new Base64().decodeBase64(data.getBytes()); Cipher cipher Cipher.getInstance(AES/CBC/NoPadding); SecretKeySpec keyspec new SecretKeySpec(key.getBytes(), AES); IvParameterSpec ivspec new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); byte[] original cipher.doFinal(encrypted1); //转载其他文章发现这里没有trim而在外部调用时trim个人觉得没有必要 String originalString new String(original).trim(); return originalString; } catch (Exception e) { e.printStackTrace(); return null; } } /** * 使用默认的key和iv加密 * param data * return * throws Exception */ public static String encrypt(String data) throws Exception { return encrypt(data, KEY, IV); } /** * 使用默认的key和iv解密 * param data * return * throws Exception */ public static String desEncrypt(String data) throws Exception { return desEncrypt(data, KEY, IV); } }然后后端方法中调用即可。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2425951.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!