AES加密解密算法(前端后端互通)

您所在的位置:网站首页 前端密码加密到后端解密要多久 AES加密解密算法(前端后端互通)

AES加密解密算法(前端后端互通)

2024-07-10 04:13| 来源: 网络整理| 查看: 265

一、适用范围:

1,前端加密,前端解密

2,前端加密,后端解密

3,前端解密,后端加密

4,后端解密,后端加密

二、后端加密解密实现

package com.test; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; /***************************************************** * AES加密解密工具 ****************************************************/ public class AesUtil { private static final Logger logger = Logger.getLogger(AesUtil.class); //log日志 private static final String ALGORITHM = "AES/ECB/PKCS5Padding"; //"算法/模式/补码方式" /***************************************************** * AES加密 * @param content 加密内容 * @param key 加密密码,由字母或数字组成 此方法使用AES-128-ECB加密模式,key需要为16位 加密解密key必须相同,如:abcd1234abcd1234 * @return 加密密文 ****************************************************/ public static String enCode(String content, String key) { if (key == null || "".equals(key)) { logger.info("key为空!"); return null; } if (key.length() != 16) { logger.info("key长度不是16位!"); return null; } try { byte[] raw = key.getBytes(); //获得密码的字节数组 SecretKeySpec skey = new SecretKeySpec(raw, "AES"); //根据密码生成AES密钥 Cipher cipher = Cipher.getInstance(ALGORITHM); //根据指定算法ALGORITHM自成密码器 cipher.init(Cipher.ENCRYPT_MODE, skey); //初始化密码器,第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第二个参数为生成的AES密钥 byte [] byte_content = content.getBytes("utf-8"); //获取加密内容的字节数组(设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码 byte [] encode_content = cipher.doFinal(byte_content); //密码器加密数据 return Base64.encodeBase64String(encode_content); //将加密后的数据转换为字符串返回 } catch (Exception e) { e.printStackTrace(); return null; } } /***************************************************** * AES解密 * @param content 加密密文 * @param key 加密密码,由字母或数字组成 此方法使用AES-128-ECB加密模式,key需要为16位 加密解密key必须相同 * @return 解密明文 ****************************************************/ public static String deCode(String content, String key) { if (key == null || "".equals(key)) { logger.info("key为空!"); return null; } if (key.length() != 16) { logger.info("key长度不是16位!"); return null; } try { byte[] raw = key.getBytes(); //获得密码的字节数组 SecretKeySpec skey = new SecretKeySpec(raw, "AES"); //根据密码生成AES密钥 Cipher cipher = Cipher.getInstance(ALGORITHM); //根据指定算法ALGORITHM自成密码器 cipher.init(Cipher.DECRYPT_MODE, skey); //初始化密码器,第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第二个参数为生成的AES密钥 byte [] encode_content = Base64.decodeBase64(content); //把密文字符串转回密文字节数组 byte [] byte_content = cipher.doFinal(encode_content); //密码器解密数据 return new String(byte_content,"utf-8"); //将解密后的数据转换为字符串返回 } catch (Exception e) { e.printStackTrace(); return null; } } /***************************************************** * AES加密解密测试 * @param args * @return ****************************************************/ public static void main(String[] args) { String content = "加密解密测试"; logger.info("加密content:"+content); String key = "abcd1234abcd1234"; logger.info("加密key:"+key); String enResult = enCode(content, key); logger.info("加密result:"+enResult); String deResult = deCode(enResult, key); logger.info("解密result:"+deResult); } }

三、前端加密解密实现

1,加密解密方法放在自己写的my-aes-crypto.js文件里,如下:

/***************************************************** * AES加密 * @param content 加密内容 * @param key 加密密码,由字母或数字组成       此方法使用AES-128-ECB加密模式,key需要为16位       加密解密key必须相同,如:abcd1234abcd1234 * @return 加密密文 ****************************************************/function encrypt(content, key){ var sKey = CryptoJS.enc.Utf8.parse(key); var sContent = CryptoJS.enc.Utf8.parse(content); var encrypted = CryptoJS.AES.encrypt(sContent, sKey, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); return encrypted.toString(); } /***************************************************** * AES解密 * @param content 加密密文 * @param key 加密密码,由字母或数字组成       此方法使用AES-128-ECB加密模式,key需要为16位       加密解密key必须相同,如:abcd1234abcd1234 * @return 解密明文 ****************************************************/ function decrypt(content, key){ var sKey = CryptoJS.enc.Utf8.parse(key); var decrypt = CryptoJS.AES.decrypt(content, sKey, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); return CryptoJS.enc.Utf8.stringify(decrypt).toString(); }

2,上面的方法需要依赖aes.js,代码如下:

!function(t,n){"object"==typeof exports?module.exports=exports=n():"function"==typeof define&&define.amd?define([],n):t.CryptoJS=n()}(this,function(){var t=t||function(t,n){var i=Object.create||function(){function t(){}return function(n){var i;return t.prototype=n,i=new t,t.prototype=null,i}}(),e={},r=e.lib={},o=r.Base=function(){return{extend:function(t){var n=i(this);return t&&n.mixIn(t),n.hasOwnProperty("init")&&this.init!==n.init||(n.init=function(){n.$super.init.apply(this,arguments)}),n.init.prototype=n,n.$super=this,n},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var n in t)t.hasOwnProperty(n)&&(this[n]=t[n]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),s=r.WordArray=o.extend({init:function(t,i){t=this.words=t||[],i!=n?this.sigBytes=i:this.sigBytes=4*t.length},toString:function(t){return(t||c).stringify(this)},concat:function(t){var n=this.words,i=t.words,e=this.sigBytes,r=t.sigBytes;if(this.clamp(),e%4)for(var o=0;o>>2]>>>24-o%4*8&255;n[e+o>>>2]|=s2]=i[o>>>2];return this.sigBytes+=r,this},clamp:function(){var n=this.words,i=this.sigBytes;n[i>>>2]&=429496729516)&e,n=18e3*(65535&n)+(n>>16)&e;var r=(i2]>>>24-r%4*8&255;e.push((o>>>4).toString(16)),e.push((15&o).toString(16))}return e.join("")},parse:function(t){for(var n=t.length,i=[],e=0;e>>3]|=parseInt(t.substr(e,2),16)2]>>>24-r%4*8&255;e.push(String.fromCharCode(o))}return e.join("")},parse:function(t){for(var n=t.length,i=[],e=0;e>>2]|=(255&t.charCodeAt(e))>24-i%4*8&255,f=e[i+1>>>2]>>>24-(i+1)%4*8&255,c=e[i+2>>>2]>>>24-(i+2)%4*8&255,s=o16&255]^t[u>>>8&255]^c[255&v]^i[h++],l=n[d>>>24]^o[u>>>16&255]^t[v>>>8&255]^c[255&a]^i[h++],_=n[u>>>24]^o[v>>>16&255]^t[a>>>8&255]^c[255&d]^i[h++],k=n[v>>>24]^o[a>>>16&255]^t[d>>>8&255]^c[255&u]^i[h++];a=p,d=l,u=_,v=k}var p=(s[a>>>24]>16&255]>8&255]>24]>16&255]>8&255]>24]>16&255]>8&255]>24]>16&255]>8&255]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3