常采用的是AES的加密解密方法,再稍微掺杂点随机数
JS端

//需要引入 aes.js
/*** 非规则的aes加密,自己加了字符串* @param s* @returns*/
function aesEncode(s) {var key = CryptoJS.enc.Latin1.parse('abcdef0123456789');var iv = CryptoJS.enc.Latin1.parse('0123456789abcdef');// 加密var encrypted = CryptoJS.AES.encrypt(s, key, {iv : iv,mode : CryptoJS.mode.CBC,padding : CryptoJS.pad.ZeroPadding});var enc=encrypted.toString();var ran=randomWord(false,9);return ran+enc;
}
/*** 非规则的aes解密自己加了字符串* @param s* @returns*/
function aesDecode(s) {var d=s.substr(9);var key = CryptoJS.enc.Latin1.parse('abcdef0123456789');var iv = CryptoJS.enc.Latin1.parse('0123456789abcdef');var decrypted = CryptoJS.AES.decrypt(d, key, {iv : iv,padding : CryptoJS.pad.ZeroPadding});return decrypted.toString(CryptoJS.enc.Utf8);
}/*** 生成3-32位随机串:randomWord(true, 3, 32)* 生成43位随机串:randomWord(false, 43)* randomWord 产生任意长度随机字母数字组合* randomFlag-是否任意长度 min-任意长度最小位[固定位数] max-任意长度最大位* xuanfeng 2014-08-28*/function randomWord(randomFlag, min, max){var str = "",range = min,arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];// 随机产生if(randomFlag){range = Math.round(Math.random() * (max-min)) + min;}for(var i=0; i<range; i++){pos = Math.round(Math.random() * (arr.length-1));str += arr[pos];}return str;
}

JAVA端


import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.misc.BASE64Decoder;/*** 高级加密标准(英语:Advanced Encryption Standard* 稍微扩展了下* * @author Norton Lai* @created 2019-5-14 上午9:18:02*/
public class AesExpand {/*** 日志记录器* @Fields LOG */private static Logger LOG=LoggerFactory.getLogger(AesExpand.class);// static String data = "123456RWEQR";static String key = "abcdef0123456789"; // 16位 秘钥 使用时候用genvi方法重新生成过static String iv = "0123456789abcdef"; // 16位 偏移量 使用时候用genvi方法重新生成过static String orig = "0123456789abcdef"; // 16位public static void main(String args[]) throws Exception {System.out.println(encryptAESExpand("admin"));System.out.println(decryptAESExpand(encryptAESExpand("admin")));}public static String genIv() {char[] chars = orig.toCharArray();StringBuilder sb = new StringBuilder();Random r = new Random();for (int i = 0; i < 16; i++) {int idx = r.nextInt(16);sb.append(chars[idx]);}return sb.toString();}/*** 加密* @param data* @return* @throws Exception* @author Norton Lai* @created 2019-5-14 上午10:54:50*/public static String encryptAESExpand(String data){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);String encode = new sun.misc.BASE64Encoder().encode(encrypted);//如果数据过长base64会自动添加换行符encode=encode.replaceAll(System.lineSeparator(), "");return getChar(9)+encode;} catch (Exception e) {LOG.error("加密错误"+e.getMessage(),e);return null;}}/*** 随机固定数目字符串* @param length* @return* @author Norton Lai* @created 2019-5-14 上午10:57:56*/public static String getChar(int length) {char[] ss = new char[length];int i=0;while(i<length) {int f = (int) (Math.random()*3);if(f==0)  ss[i] = (char) ('A'+Math.random()*26);else if(f==1)  ss[i] = (char) ('a'+Math.random()*26);else ss[i] = (char) ('0'+Math.random()*10);    i++;}String str=new String(ss);return str;}/*** 解密* @param data* @return* @throws Exception* @author Norton Lai* @created 2019-5-14 上午10:54:33*/public static String decryptAESExpand(String data){try {data=data.substring(9);byte[] encrypted1 = new BASE64Decoder().decodeBuffer(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).trim();return originalString;} catch (Exception e) {LOG.error("解密错误"+e.getMessage(),e);return null;}}
}

JAVA与js加密解密我常用的方法相关推荐

  1. Java常见的加密解密

    Java常见的加密解密 不可逆加密 介绍 应用场景 一致性验证 MD5 可以为文件传输场景中,提供文件的一致性验证. 例如,文件服务器预先提供一个 MD5 校验值,用户下载完文件以后,用 MD5 算法 ...

  2. 条理清晰的入门:使用Java实现RSA加密解密

    条理清晰的入门:使用Java实现RSA加密解密 什么是RSA 使用Java 需要导入的头文件 生成公钥.私钥 进行加密解密 密钥的存储 密文的存储.读取 什么是RSA 翻一下以前的密码学笔记,找到了! ...

  3. php与java的des加密解密

    与第三方接口对接des加密.解密,第三方提供java的des加密解密demo,特记录PHP与java加密解密. import javax.crypto.*; import javax.crypto.s ...

  4. java 文件进行加密解密,java 对文件加密解密,该如何解决

    java 对文件加密解密 本帖最后由 Hong_1993 于 2014-09-03 10:51:35 编辑 我现在想做一个基于spring mvc 模式的 实现对  文件或目录文件   的加解密(de ...

  5. java 3des_如何用Java进行3DES加密解密 java实现3des加密解密教程

    3des,全称为3DESede或TripleDES,中文解释为是三重数据加密,用户可以通过通过对DES算法进行改进,针对每个数据块进行三次DES加密,下面小编为你带来java实现3des加密解密教程! ...

  6. C#开发中关于加密解密字符串的使用方法

    C#开发中关于加密解密字符串的使用方法 C#加密解密字符串方法 首先在web.config | app.config 文件下增加如下代码: <?xml version="1.0&quo ...

  7. asp php base64 加密解密,base64加密解密_php base64_decode 解码方法

    base64加密解密_php base64_decode 解码方法 观点1: php实现base64加密解密 在PHP中我们可以直接使用PHP自带的函数 base64_encode() 和 base6 ...

  8. js , java 异或加密解密

    js代码(错误写法): /*** 异或加密,解密* @param {byte[]} data* */export function Xor(data){let tmpc =0;var key =&qu ...

  9. java变短加密解密算法_java----加密/解密常用算法

    一.常用的加密/解密算法 1.Base64 严格来说,Base64不是一种加密/解密算法,而是一种编码方式,多用于解决中文乱码中. 常用场景:对文件.URL等进行Base64编码,以字符串方式发送给对 ...

  10. 【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )

    文章目录 一.加密解密算法 API 二.编译代理 Application 依赖库 三.解压代理 Application 依赖库 aar 文件 参考博客 : [Android 安全]DEX 加密 ( 常 ...

最新文章

  1. 22岁天才少女加入华为俄罗斯研究院,曾获「编程界奥赛」冠军
  2. python运行程序-Python中四种运行其他程序的方式
  3. c#常用函数和方法集
  4. SAP WebService基础知识
  5. webpack 的 scope hoisting 是什么?
  6. 关于 韩国 申明 豆浆 和 端午 是其国家创造或历史的 看法
  7. 全网首发:LINUX制作安装deb版本时,打开方式的适配总结
  8. linux学习笔记-文件属性基本知识
  9. 最详细的Android SDK下载安装及配置教程
  10. matlab 水箱fuzzy,matlab中使用fuzzy工具箱
  11. Android蓝牙自动配对和Pin码设置
  12. Python之灵异事件
  13. 联想服务器无线网卡被禁用,win10系统联想笔记本禁用无线网络适配器的处理技巧...
  14. 脱机使用打印机是什么意思?
  15. 【Windows Server 2019】路由服务的配置和管理
  16. Python 列表推导式的实用小技巧
  17. 谷歌浏览器无法翻译,最新谷歌翻译插件(chrome更强大的谷歌浏览器插件,腾讯翻译,一劳永逸)
  18. 巧妙隐藏Word文档中指定文字内容
  19. 什么是内存泄露,如何避免内存泄露 C++
  20. 麦兜搞it python_一位大牛整理的python资源(转)

热门文章

  1. AD原理图库和PCB封装库下载
  2. Python实验-字典攻击
  3. 视频教程-CCNA趣味实战语音视频课程--企业VoIP组网实验-思科认证
  4. 数据挖掘十大经典算法原理
  5. sqlite developer注册码(转)
  6. Windows 7 Ultimate Download (Windows 7 旗舰版下载)
  7. javascript视频教程之《ECMA5核心+设计模式》
  8. 毕业设计之 --- 基于Java web的动漫论坛设计与实现
  9. 多易大数据学习实况记录
  10. CSS:淘宝商品展示样式