crypto.js 前端加解密
简介
crypto-js是谷歌开发的一个纯JavaScript的加密算法类库,可以非常方便的在前端进行其所支持的加解密操作。目前crypto-js已支持的算法有:MD5、SHA-1、SHA-256、AES、RSA、Rabbit、MARC4、HMAC、HMAC-MD5、HMAC-SHA1、HMAC-SHA256、PBKDF2等。使用时可以引用总文件,也可以单独引用某一文件。
下载
https://github.com/brix/crypto-js/releases
使用
第一步
引入crypto-js.js文件
<script src="crypto-js.js"></script>
第二步
在提交前,对用户名和密码进行加密
function formencode(){var KEY = CryptoJS.enc.Utf8.parse("1234567890123456");var IV = CryptoJS.enc.Utf8.parse('1234567890123456');var key = KEY;var iv = IV;var pwd = $("#password").val();var pwdEncode = CryptoJS.enc.Utf8.parse(pwd);var encryptedPassword = CryptoJS.AES.encrypt(pwdEncode, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.ZeroPadding});var encryptPasswordBase64 = CryptoJS.enc.Base64.stringify(encryptedPassword.ciphertext);$("#password").val(encryptPasswordBase64); var username = $("#username").val();var nameuserEncode = CryptoJS.enc.Utf8.parse(username);var encryptedUsername = CryptoJS.AES.encrypt(nameuserEncode, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.ZeroPadding});var encryptedUsernameBase64 = CryptoJS.enc.Base64.stringify(encryptedUsername.ciphertext);$("#username").val(encryptedUsernameBase64 );
}
第三步
后台接收处理解密
String username = h.get("username","");
String password = h.get("password","");
if(!username.equals("")) {username = AesEncode.desEncrypt(username);password = AesEncode.desEncrypt(password);out.print("解密后的用户名/密码:" + username + "/" + password);
}
AesEncode类
```java
package util;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
/*** @author 作者 :Mall*/
public class AesEncode {// 使用AES-128-CBC加密模式,key需要为16位,key和iv可以相同!private static String KEY = "1234567890123456";private static String IV = "1234567890123456";/*** 加密方法* * @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");// "算法/模式/补码方式"NoPadding// PkcsPaddingint 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().decode(data);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);String originalString = new String(original);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);}}
实现的jsp页
```java```css
<%@page import="util.AesEncode"%>
<%@page import="tea.entity.Http"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%
Http h = new Http(request);
String username = h.get("username","");
String password = h.get("password","");
if(!username.equals("")) {username = AesEncode.desEncrypt(username);password = AesEncode.desEncrypt(password);out.print("解密后的用户名/密码:" + username + "/" + password);
}
%>
<!doctype html>
<html>
<head><script src="/tea/jquery-1.3.1.min.js"></script><script src="crypto-js.js"></script>
</head>
<body><form action="?">用户名:<input type="text" name="username" id="username"/>密 码:<input type="password" name="password" id="password"/><input type="submit" value="提交"/><input type="button" onclick="formencode()" value="加密"/></form></body>
</html>
<script>
function formencode(){var KEY = CryptoJS.enc.Utf8.parse("1234567890123456");var IV = CryptoJS.enc.Utf8.parse('1234567890123456');var key = KEY;var iv = IV;var pwd = $("#password").val();var pwdEncode = CryptoJS.enc.Utf8.parse(pwd);var encryptedPassword = CryptoJS.AES.encrypt(pwdEncode, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.ZeroPadding});var encryptPasswordBase64 = CryptoJS.enc.Base64.stringify(encryptedPassword.ciphertext);$("#password").val(encryptPasswordBase64); var username = $("#username").val();var nameuserEncode = CryptoJS.enc.Utf8.parse(username);var encryptedUsername = CryptoJS.AES.encrypt(nameuserEncode, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.ZeroPadding});var encryptedUsernameBase64 = CryptoJS.enc.Base64.stringify(encryptedUsername.ciphertext);$("#username").val(encryptedUsernameBase64 );
}
</script>
crypto.js 前端加解密相关推荐
- base64前端加解密方法
18.base64前端加解密方法 1.添加方法js方法 const Base64 = {//加密encode(str) {if (str===undefined || str === "&q ...
- [crypto]-02-非对称加解密RSA原理概念详解
说明:本文使用的数据来自网络,重复的太多了,也不知道哪篇是原创. 算法原理介绍 step 说明 描述 备注 1 找出质数 P .Q - 2 计算公共模数 N = P * Q - 3 欧拉函数 φ(N) ...
- [crypto]-01-对称加解密AES原理概念详解
1.对称加解密 术语:P是明文,C是密文,K是密钥,E是加密算法,D是解密算 (1).常用的对称加解密有哪些? (2).加解密的模式 [ecb]这种模式是将整个明文分成若干段相同的小段,然后对每一小段 ...
- JS RC4加解密报文
JS RC4加解密 RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变.它加解密使用相同的密钥,因此也属于对称加密算法.RC4加密算法原理 , 对明文使用同一个密钥异或两 ...
- 【crypto】基于crypto.js的web前端加解密系统实现
文章目录 一.概念介绍 1.1 crypto.js介绍 1.2 加密 / 哈希 / 编码 1.2.1 加密/解密 1.2.2 散列/哈希 1.2.3 BASE64编解码 二.加解密思想(以md5为例) ...
- angular和JAVA实现aes、rsa加密解密,前后端交互,前端加解密和后端JAVA加解密实现
今天实现了下AES和RSA加密解密,主要的功能是对前后端交互数据进行加密解密,为什么要用到两个算法呢,首先RSA默认的话加密长度是有限的100多个byte吧大约,并且需要公钥私钥,而AES加密没有限制 ...
- JS逆向加解密——python 实现AES加解密
前言 写爬虫项目,做JS逆向或者APP逆向时,经常遇到网站的很多参数都经过AES加密解密,用python实现AES加解密是非常简单的,免去了扣JS代码,并且实现格式固定,所以本文提供实现好的AES加解 ...
- aes解密算法 java_AES算法实现Java和JS互通加解密
实际开发中客户端与服务端的通信内容往往需要通过密文传输,本文将介绍可以实现Java与js的互相加解密的AES加密方式 Java语言实现 public class AESTest { //static ...
- android cocoscreator jsc js 间加解密(六)
前言 前面 学了 aandroid cocoscreator 热更新 超详细篇(五) 这章 主要学习 cocoscreator 构建后 jsc 与js 文件 之间相互转化(加解密)并实际测试. 可以配 ...
- XXTea加密 c++ 与 js 互相加解密
关于加密功能,客户端使用的是creator 用js开发的,服务器端用lua做的 要做加密功能: 1.利用c++绑定调用c++实现加密, 好处: ...
最新文章
- 数据统计之月增用户统计
- 【 C 】assert.h 简明介绍
- linux 读写时间变长,linux时钟变慢的原因分析【转】
- ORACLE 11G DATA GUARD主从切换
- LeetCode MySQL 601. 体育馆的人流量(row_number+over+cast)
- android 远程桌面连接闪退,远程桌面一点连接就闪退,不能弹出输入账号密码窗口...
- 《BI那点儿事》三国数据分析系列——蜀汉五虎上将与魏五子良将武力分析,绝对的经典分析...
- Elasticsearch安装及自动同步mysql数据库数据
- leetcode python 1
- 财务自由的味道!台积电股价连创新高,经营团队15人持股价值过亿
- python零基础学难吗_零基础学习Python难吗?要怎么学Python才是最有效的?
- python导入xlsx转为csv_Python 拆分工作表为单个工作簿
- 【转】NB的specify
- “能耗大户”数据中心供配电系统
- 创维电视显示服务器异常,创维网络电视,看在线电影及网络异常的处理!
- 计算机系统组成习题检测及答案
- 阿里那些吊炸天的开源工具,你知道几个?
- 如何快速调整Excel中图表标签位置
- android 矢量图片使用方法,Android中的矢量图
- Linux就这个范儿 第13章 打通任督二脉
热门文章
- 科研论文中,图片组合方法和导出高分辨率的方法
- PSAM卡、SAM卡、SIM卡
- win7做ftp服务器是否稳定,win7可以做ftp服务器吗
- 串口服务器芯片方案,串口转以太网单芯片
- android cocos 二次启动 崩溃,基于cocos2dx 1.0.1 0.12.0的第二次运行时android...
- LOFTER轻博模板设计
- 【樽海鞘算法】基于衰减因子和动态学习的改进樽海鞘群算法(RDSSA)求解单目标优化问题matlab代码
- wechat微信模板消息推送demo
- 汽车电子ISO7637-2 5A/5B抛负载测试详解
- python爬取instom图片_用python爬虫保存instagram图片