实用为主,直接上干货。
使用工具: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博客