前后台数据传输问题----AES加密,前台JS加密,后台JAVA解密。

一、JS中加密(解密)数据,采用的是谷歌的CryptoJS静态件

       链接: https://pan.baidu.com/s/1l5pHY4g45zzL85dDs8M82Q

               (如果CSDN无法直接跳转,建议使用浏览器进行访问)
       提取码:4v6p

  1. jsp页面需要引入两个js,一个是加密的规则,另一个是加密的算法。(注意引入的顺序)
    <script type="text/javascript" src="ace.js"></script>
    <script type="text/javascript" src="mode-ecb.js"></script>

     

  2.  js加密实现

    //word为需要加密的String字符
    function encrypt(word){
             //密钥--应和后台java解密或是前台js解密的密钥保持一致(16进制)
             var key = CryptoJS.enc.Utf8.parse("1111wwww2222uuuu");   
             //偏移量
             var srcs = CryptoJS.enc.Utf8.parse(word);  
             //算法
             var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});  
             //替换--防止值为“1”的情况
             var reg = new RegExp('/',"g");
             return encrypted.toString().replace(reg,"#");  
    }  

     

  3. js解密实现
function decrypt(word){  
         var key = CryptoJS.enc.Utf8.parse("1111wwww2222uuuu");   
         var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});  
         return CryptoJS.enc.Utf8.stringify(decrypt).toString();  
    }  

 

二、java中解密(加密)数据实现

  1. 创建加密工具类
    package com.sinosoft.utility;
     
    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.spec.SecretKeySpec;
     
    import org.apache.commons.codec.binary.Base64;
    import org.apache.commons.lang3.StringUtils;
     
    import sun.misc.BASE64Decoder;
     
    /**
     * 加密工具类 实现aes加密、解密
     */
    @SuppressWarnings("restriction")
    public class AesUtil {
     
    	//密钥(16进制,和前台保持一致,或者是作为参数直接传过来也可以)
    	private static final String defaultKey = "1111wwww2222uuuu";
            //算法PKCS5Padding
    	private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding";
            //测试数据
    	private static final String testContent = "1";
     
    	//自测
    	public static void main(String[] args) throws Exception {
    		System.out.println("加密前:" + testContent);
     
    		String encrypt = encrypt(testContent);
    		System.out.println("加密后:" + encrypt);
     
    		String decrypt = decrypt(encrypt);
    		System.out.println("解密后:" + decrypt);
    	}
     
    	
     
    	//AES加密--为base 64 code
    	public static String encrypt(String content) throws Exception {
    		return base64Encode(aesEncryptToBytes(content));
    	}
    
            //AES解密--并解密base 64 code
    	public static String decrypt(String encryptStr) throws Exception {
                    encryptStr.replaceAll("#","/");
    		return StringUtils.isEmpty(encryptStr) ? null : aesDecryptByBytes(base64Decode(encryptStr));
    	} 
    
     
    	//base 64 encode编码
    	private static String base64Encode(byte[] bytes) {
    		return Base64.encodeBase64String(bytes);
    	}
     
    	//base 64 decode解码---》因为传过来的值是通过base64编码而后再进行aes加密出来的,所以解密之前先进行base64解码
    	private static byte[] base64Decode(String base64Code) throws Exception {
    		return StringUtils.isEmpty(base64Code) ? null : new BASE64Decoder().decodeBuffer(base64Code);
    	}
     
    
    	//AES加密
    	private static byte[] aesEncryptToBytes(String content) throws Exception {
    		KeyGenerator kgen = KeyGenerator.getInstance("AES");
    		kgen.init(128);
    		Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
    		cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(defaultKey.getBytes(), "AES"));
     
    		return cipher.doFinal(content.getBytes("utf-8"));
    	}
    
    	//AES解密
    	private static String aesDecryptByBytes(byte[] encryptBytes) 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[] decryptBytes = cipher.doFinal(encryptBytes);
     
    		return new String(decryptBytes,"utf-8");
    	}
     
    
     
    }
    

     

  2. java类中具体调用实现。

    //提供调用的方法
    public static String getAes(String data){
        if(!StringUtils.isEmpty(data)){
            String str = AesUtil.decrypt(data);
            return str;
        }
        return data;
    }

     

三、以上js加密解密,和java加密解密,皆可通用,组合。

四、本文经由思考并解决部分问题而整理出来,参考博客

     http://blog.csdn.net/z83986976/article/details/51027150

     https://blog.csdn.net/u010648555/article/details/68066629

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
AES即高级加密标准(Advanced Encryption Standard),是一种对称加密算法,适用于加密解密数据。 在AES前台加密解密中,加密解密操作均在应用程序的前台进行。具体过程如下: 1. 加密过程:首先,应用程序将待加密的明文通过AES算法进行加密处理。加密过程中需要指定密钥,密钥可以是128位、192位或256位的长度。应用程序利用密钥和AES算法将明文转化为密文。 2. 解密过程:当需要解密密文时,应用程序将密文通过相同的AES算法和密钥进行解密处理。解密过程会还原出原始的明文。 在AES后台加密解密中,加密解密操作由后台系统完成。具体过程如下: 1. 加密过程:后台系统接收到待加密的明文,在不暴露密钥的情况下,使用AES算法和事先设定好的密钥进行加密处理。加密后的密文可以被传输前台应用程序进行存储或传输。 2. 解密过程:当需要解密密文时,应用程序将密文传递给后台系统。后台系统利用之设定好的密钥和AES算法对密文进行解密处理,还原出原始的明文。解密后的明文可以再次传输前台应用程序进行处理或显示。 无论是前台加密解密还是后台加密解密,使用AES算法可以提供高强度的数据保护,保证数据在传输和存储过程中的机密性和完整性。同时,密钥的安全性也是保障AES加密解密过程中重要的一环,应该采用安全可靠的方式管理和存储密钥。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值