首页

基于crypto库前后端实现AES的ECB/Pkcs7方式数据加解密示例demo代码

标签:js AES,cryptojs,加解密,encrypt,decrypt,web加密,javascript解密,前后端加解密,PKCS7Padding,ECB,SecretKeySpec     发布时间:2022-05-19   

一、示例说明

Web前端基于CryptoJS加密解密JS库,配置CryptoJS.mode.ECB模式和CryptoJS.pad.Pkcs7方式,采用aes对称密钥实现数据加解密。java后端采用相同匹配的AES/ECB/PKCS7Padding模式,基于前后端加解密方式一致情况下,可以实现后端aes加密前端解密的应用场景。

二、代码示例

1. 前端html代码示例如下

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">@b@<html xmlns="http://www.w3.org/1999/xhtml">@b@<head> @b@<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> @b@<script src="http://www.xwood.net/js/jquery-1.6.2.min.js"></script> @b@<script src="http://www.xwood.net/js/crypto-js.min.js"></script> @b@@b@<script type="text/javascript"> @b@	var aseKey = "123456"     //秘钥必须为:8/16/32位@b@	var message = "我是明文!";@b@	//加密@b@	var encrypt = CryptoJS.AES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey), {@b@	  mode: CryptoJS.mode.ECB,@b@	  padding: CryptoJS.pad.Pkcs7@b@	}).toString();@b@	alert(encrypt);    //5mWpefLiNuqYeCAUg5Gchg==@b@	 @b@	 @b@	//解密@b@	var decrypt = CryptoJS.AES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey), {@b@	  mode: CryptoJS.mode.ECB,@b@	  padding: CryptoJS.pad.Pkcs7@b@	}).toString(CryptoJS.enc.Utf8);@b@	alert(decrypt);    //我是明文! @b@@b@</script> @b@@b@@b@@b@</head>@b@<body >@b@  @b@  @b@</body>@b@</html>

2. java后端代码部分(bcprov-jdk16依赖包)

<dependency>@b@  <groupId>org.bouncycastle</groupId>@b@  <artifactId>bcprov-jdk16</artifactId>@b@  <version>1.46</version>@b@ </dependency>
import java.security.Security;@b@@b@import javax.crypto.Cipher;@b@import javax.crypto.spec.SecretKeySpec;@b@ @b@import org.apache.commons.codec.binary.Base64;@b@import org.apache.commons.codec.binary.Hex; @b@  @b@ @b@public class AESUtil {@b@    @b@	//add new bouncycastle ciphers@b@    static {@b@        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());@b@    }@b@ @b@    public static void main(String[] args) {@b@ @b@        // encryption key should be multiple of 16 character long@b@    	String key = "abcdefghijklmnop";@b@        String data = "0123456789";@b@ @b@        String encrypted = AESUtil.encrypt(data,key);@b@        System.out.println("加密后数据: "+encrypted);@b@        String decrypted = AESUtil.decrypt(AESUtil.encrypt(data, key), key);@b@        System.out.println("解密后数据: "+decrypted);@b@    }@b@ @b@    /**@b@     * encrypt input text@b@     *@b@     * @param input@b@     * @param key@b@     * @return@b@     */@b@    public static String encrypt(String input, String key) {@b@        byte[] crypted = null;@b@        try {@b@ @b@            SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES"); @b@            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");@b@            cipher.init(Cipher.ENCRYPT_MODE, skey);@b@            crypted = cipher.doFinal(input.getBytes());@b@        } catch (Exception e) {@b@            System.out.println(e.toString());@b@            e.printStackTrace();@b@        }@b@ @b@        return new String(Base64.encodeBase64(crypted));@b@//        return new String(Hex.encodeHex(crypted)).toUpperCase();@b@//        return new String(Base64.encodeBase64(crypted));@b@    }@b@ @b@    /**@b@     * decrypt input text@b@     *@b@     * @param input@b@     * @param key@b@     * @return@b@     */@b@    public static String decrypt(String input, String key) {@b@        byte[] output = null;@b@        try {@b@            SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");@b@            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");@b@            cipher.init(Cipher.DECRYPT_MODE, skey);@b@            output = cipher.doFinal(Base64.decodeBase64(input));@b@            output = cipher.doFinal(Hex.decodeHex(input.toCharArray()));@b@        } catch (Exception e) {@b@            System.out.println(e.toString());@b@        }@b@        return new String(output);@b@    }@b@    @b@}

控制台运行

加密后数据: Ny0eP1CmaoqSYcqsfDboog==@b@org.apache.commons.codec.DecoderException: Illegal hexadecimal character N at index 0@b@解密后数据: 0123456789
<<推荐下载>>
  • (1) 阿里巴巴Java开发手册8种不同版本
  • (2) Web前端开发视频教程
  • (3) 30+明星讲师PPT课件分享一线大厂架构实战经验
  • (4) java开发_架构篇_视频资源分享_v2208
  • (5) java开发_高级篇_视频资源分享_v2208
  • (6) java开发_进阶篇(中级)_视频资源分享_v2208
  • (7) java开发_入门篇_视频资源分享_v2208
  • (8) 微信小程序开发视频1+167源码+实战demo等下载
  • (9) easy-shopping电子商务java源码(附脚本和安装文档说明)下载
  • (10) java常用的72份知名实用的电子书下载
  • (11) java开发性能优化资料整理大全(8份电子文档+3份实战优化)下载
  • (12) 9个常用的算法设计资料和100以上视频课件内容下载
  • (13) vue开发必备常用手册16件下载
  • (14) 21种不同技术集群方案(es、flink、redis、nginx、zk、lvs、kafka、mysql、k8s等)参考资料下载
  • (15) 20种技术代码规范(js/java/dba/阿里/华为/oracle/mysql等)参考资料下载
  • (16) 微服务五套资料(0-1,架构设计,springcloud,nacos等)下载
  • (17) 架构师(28知识图谱+3套简历模板+6套架构实战文档等)完整资料整理下载
  • (18) 大数据18套实战基础知识+8套简历模板下载
  • (19) 并发编程全套(7套+阿里巴巴+亿级实战等)实战资料下载
  • (20) Kafka九套学习整理知识点全套(面试+笔记+代码api+命令+容备等)资料下载
  • (21) java全套9个不同方向类型的面试题(基础+核心+大厂+架构师+近万套题库等)下载
  • (22) JAVA开发常用API帮助文档大全(超52种以上技术资料,高手必备)下载
  • (23) springcloud超详细139件全套学习实战资料( 视频课件+源码demo+文档资料等)下载
  • 更多推荐>>
  • <<热门文章>>