记录使用crypto-js、jsencrypt实现js加密的方法

实用为主,直接上干货。

使用工具:pycharm专业版2020.3.2。

记录通过crypto-js模块、jsencrypt模块两种方式实现加密。

本文在pycharm中新建一个项目,一步一步记录实现步骤。

一、新建pycharm项目并新建两个js文件,分别命名为crypto123.js和jsencrypt123.js

二、在此项目中初始化npm

打开pycharm底部的Terminal,输入npm init -y

运行完毕后,在项目目录中会出现一个package.json的文件。

参考文章npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\...\package.json'问题解决_no such file or directory, open package.json-CSDN博客 

三、安装crypto-js模块、jsencrypt模块

(一)安装crypto-js模块

在Terminal中,输入npm i crypto-js

安装完成后,在项目目录中会出现一个node_modules的文件夹,其中有一个crypto-js的文件夹。

友情提示:在npm库中,还有一个cryptojs的库,与crypto-js就缺少一个-,但是不同的库,不是我们需要的。一定注意安装时不要弄混。

(二)安装jsencrypt模块

在Terminal中,输入npm i jsencrypt

在项目路径下的node_modules文件夹中出现jsencrypt文件夹。

通过以上(一)(二)步骤,所需要的模块就安装好了。

注意,npm i 模块名这种安装方式,是局部安装,可以理解为,这两个模块只在本项目下可以使用。 

npm的操作可以参考文章:https://zhuanlan.zhihu.com/p/711020089

npm有很多模块,在官网上可以查询,参考链接:npm | Home 

四、使用模块实现加密

(一)crypto-js模块加密实现

(1)MD5的实现

const cryptoJS = require('crypto-js')
aaa=cryptoJS.MD5('123456');
s=aaa.toString();
console.log(s)

测试成功,友情提示,记住123456的md5是e10adc3949ba59abbe56e057f20f883e,有用。

(2)AES加密的实现

//(2)AES加密的实现
const cryptoJS = require('crypto-js')
const message = cryptoJS.enc.Utf8.parse('123456')//需要加密的明文
const secretPassphrase = cryptoJS.enc.Utf8.parse('abc666666666')//秘钥
const iv = cryptoJS.enc.Utf8.parse('def888888888')//iv(CBC模式需要)

//cryptoJS.AES.encrypt需要三个参数:1,加密明文内容;2.秘钥;3,配置对象(默认CBC模式,需要iv;若是ECB,不需要iv)
const encrypted = cryptoJS.AES.encrypt(message, secretPassphrase, {
  mode: cryptoJS.mode.CBC,
  padding: cryptoJS.pad.Pkcs7,
  iv
}).toString()

console.log(encrypted)

(3)DES加密的实现

const cryptoJS = require('crypto-js')
const message = '123456';//要加密的明文
const key = "abc666666666";//秘钥

const options = {
  iv: cryptoJS.enc.Hex.parse('0000000000000000'), // 初始化向量为全零,初始化向量用于增加密码算法的安全性。16 字节的字节数组或WordArray 对象
  mode: cryptoJS.mode.ECB, // 加密模式,默认为 ECB
  padding: cryptoJS.pad.Pkcs7, //使用 Pkcs7 填充方式。这是最常用的填充方式,会在原始数据的末尾添加字节,使得数据长度符合加密算法的要求。
};


const encrypted = cryptoJS.DES.encrypt(message, key, options);
const ciphertext = encrypted.toString();

console.log('加密后的密文:', ciphertext);

const decrypted = cryptoJS.DES.decrypt(ciphertext, key, options);
console.log('解密后的明文:', decrypted.toString(cryptoJS.enc.Utf8))

(二)jsencrypt模块RSA加密实现

const JSEncrypt = require('jsencrypt');

// 公钥
const key = 'MIGfMA0GCSqGSIb3XXXXXXXXXXXXX'

// 加密
function setEncrypt (msg) {
  const jsencrypt = new JSEncrypt();
  jsencrypt.setPublicKey(key);
  return jsencrypt.encrypt(msg);
}

console.log(setEncrypt('123456'));

提示出错:ReferenceError: window is not defined 。

不要紧张,按住ctrl后鼠标点击出错链接,跳转到jsencrypt.js的源码处,在顶部添加window=global;即可。

再次回到程序运行,得到正确结果

参考文章:

前端加密与 crypto-js 和 JSEncrypt 的使用_wx65532c6f69751的技术博客_51CTO博客

nodejs之 crypto-js模块,浏览器端加解密算法库-CSDN博客

在pycharm中设置后直接运行js代码-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值