1.前言(老司机直接跳过) 为什么js需要加密

谈到加密,大多数人应用场景都在于后端接口的加密签名校验。这种一般都用于服务端与服务端之间的相互调用,避免第三方使用你的接口做违法违规的事情,这种加密校验比较安全,因为没有暴露在外的代码。

但是前端运行的JavaScript代码不一样,它是运行在浏览器的一种轻量级即时编译型的脚本语言。它是直接运行在用户电脑上的代码,除了在sojson.v6加密过的js代码,普通的js代码对于使用者来说是公开透明的,对于想要非法获取你的数据的人也是公开透明的,那么对于那些想要通过分析你的js代码来盗取你服务器数据的人来说,就是一件十分简单没难度的事情。

2.常用的js加密有哪些

JavaScript的原生函数escape()和unescape()

var code = 'console.log("hello")';
var en = escape(code); // console.log%28%22hello%22%29
var de = unescape(en); // console.log("hello")
document.write(en, '     ', de)

用escape函数加密后,字符变成了%开头形式的特殊编码。

我们也可以用unescape把加密后的js解密回来

md5

https://github.com/blueimp/JavaScript-MD5

var hash = md5('value') // "2063c1608d6e0baf80249c42e2be5804"

MD5算法的原理可简要的叙述为:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

md5加密一般用于确保文件和代码的唯一性,可以根据计算代码的md5值来判断代码是否被改变。

des/aes

https://github.com/brix/crypto-js

DES是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用

1. 在utils/common.js中 写入公用的方法eg:// 公用方法import CryptoJS from "../common/crypto-js/crypto-js.js" // 加密// 在main.js中引入export default {// 加密encryptByDES(message, key) {const keyHex = CryptoJS.enc.Utf8.parse(key);const encrypted = CryptoJS.DES.encrypt(message, keyHex, {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7,});return encrypted.toString();}}
2. 在main.js中引入import commonFun from './utils/common.js'//在 vue 的原型链 (prototype) 中注册Vue.prototype.$commonFun = commonFun
3. 页面中使用this.$commonFun.encryptByDES(参数1, 参数2);//参数1:需要加密的数据//参数2:加密key

rsa

https://github.com/rzcoder/node-rsa

RSA是被研究得最广泛的公钥算法,从提出到现在已近三十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。

const NodeRSA = require('node-rsa');
const key = new NodeRSA({b: 512});const text = 'Hello RSA!';
const encrypted = key.encrypt(text, 'base64');
console.log('encrypted: ', encrypted);
const decrypted = key.decrypt(encrypted, 'utf8');
console.log('decrypted: ', decrypted);

base64

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法

浏览器的window对象默认就有base64的加解密函数

const code = '(function(){ alert(\'hello\') }())'
const en = window.btoa(code); // 加密
const de = window.atob(en); // 解密

sha1

https://github.com/emn178/js-sha1

SHA1是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。

sha1('Message to hash');
var hash = sha1.create();
hash.update('Message to hash');
hash.hex();

sha256

https://github.com/emn178/js-sha256

SHA256是一种散列函数算法标准,由美国国家安全局研发,由美国国家标准与技术研究院(NIST)在2001年发布,属于SHA算法之一。和SHA1属于不同算法标准

sha256('Message to hash');
sha224('Message to hash');var hash = sha256.create();
hash.update('Message to hash');
hash.hex();var hash2 = sha256.update('Message to hash');
hash2.update('Message2 to hash');
hash2.array();// HMAC
sha256.hmac('key', 'Message to hash');
sha224.hmac('key', 'Message to hash');var hash = sha256.hmac.create('key');
hash.update('Message to hash');
hash.hex();var hash2 = sha256.hmac.update('key', 'Message to hash');
hash2.update('Message2 to hash');
hash2.array();

如果觉得上边这些加密方式还不够安全,无法达到你的预期,可以使用sojson.v6加密,加密强度在国内排名第一,作者每年都会更新加密算法,不停增加加密强度,既保证了js的运行速度又保证了js的安全性。

js常用的加密/解密方法相关推荐

  1. php常用的加密解密方法

    1.php 自带的加密函数: 1-1.不可逆的加密函数为:md5().crypt(): md5() 用来计算 MD5 哈稀.语法为:string md5(string str); crypt() 将字 ...

  2. JS七种加密解密方法

    HTML或JS加密解密 本文一共介绍了七种方法:   一:最简单的加密解密   二:转义字符"\"的妙用   三:使用Microsoft出品的脚本编码器Script Encoder ...

  3. C#常用加密解密方法(MD5加密解密)

    在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...

  4. C#常用加密解密方法(DES加密解密)

    在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...

  5. C#常用加密解密方法(AES加密解密)

    在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...

  6. 基于PHP和JS的AES相互加密解密方法详解(CryptoJS)

    在最近的项目中,前端后台数据交互需要进行加密之后传输使用,以保证系统数据的安全.有关数据加密解密的问题,有很多种加密的方式,在这里我选择了AES的加密方式.特此写下此篇博文,总结讲述下PHP和JS进行 ...

  7. java nodejs aes_Java与Node.js利用AES加密解密出相同结果的方法示例

    前言 工作中遇到nodejs端通过aes加密,安卓客户端Java解密,同样nodejs也需要解密安卓客户端加密过来的内容,发现两个加密结果不一样,查询资料发现java端需要对密钥再MD5加密一遍,以下 ...

  8. aes js加密php解密实例,基于PHP和JS的AES相互加密解密方法详解(CryptoJS)_PHP_JS_AES源码...

    [实例简介] 基于PHP和JS的AES相互加密解密方法详解(CryptoJS)_PHP_JS_AES源码 [实例截图] [核心代码] 基于PHP和JS的AES相互加密解密方法详解(CryptoJS)_ ...

  9. ASP.NET(C#)常用数据加密和解密方法汇总

    ASP.NET(C#)常用数据加密和解密方法汇总  一.            数据加密的概念 1.  基本概念 2.  基本功能 3.  加密形式 二.            数据加密的项目应用和学 ...

  10. ASP.NET(C#)常用数据加密和解密方法

     ASP.NET(C#)常用数据加密和解密方法汇总  一.            数据加密的概念 1.  基本概念 2.  基本功能 3.  加密形式 二.            数据加密的项目应 ...

最新文章

  1. Python-4 两个变量相互交换
  2. 【设计模式】备忘录模式
  3. 5G NPN 行业专网 — Overview
  4. 判定两个tensor维度相同_Pytorch之Tensor大详解
  5. Java深入研究_Java底层深入研究(一)
  6. lamp 配置mysql_LAMP安装配置超详细讲解
  7. C++ map简单demo
  8. python中self和cls的区别
  9. 实习成长之路: MySQL三 : 事务隔离:为什么你改了我还看不见?
  10. julia: ubuntu下安装
  11. 产品认证之IP防护等级
  12. matlab保存pdf图片太大,matlab中的图片保存方法精选.pdf
  13. 电容式麦克风和动圈式麦克风的工作原理
  14. 惠普服务器电脑装系统教程,惠普台式电脑装系统步骤
  15. IPv6网络流量分析及性能监控
  16. 计算机信息量单位kbit,网络的带宽和速率
  17. 计算机硬盘怎么看坏了,SSD固态硬盘坏掉怎么看?有哪几种征兆?
  18. netstat命令 + 黑洞路由
  19. C3P0 连接池时报 TimeoutException 的解决方法
  20. Windows 11家庭版

热门文章

  1. 编程C语言集装箱体积,《我的第①本c语言编程书:C语言从入门到精通》国家863中部软件孵化器【pdf】...
  2. linux 五笔输入法下载软件,极点五笔Linux版|极点五笔输入法官方linux版_最火软件站...
  3. 沟通CTBS助大川集团集中部署K/3系统
  4. java网络蜘蛛_基于java网络蜘蛛程序
  5. 模拟电子技术的一点心得(转)
  6. 同义词林Java如何更新维护,solr词库实时更新维护
  7. php arcsin,三角函数在线计算器
  8. 4G无线预付费电表系统设计及其应用
  9. config配置文件
  10. 两款免费、好用的数据库连接工具