当前位置: 首页 > news >正文

记录使用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, // 加密模式,默认为 ECBpadding: 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博客


http://www.mrgr.cn/news/42401.html

相关文章:

  • Authentication Lab | JWT None Algorithm
  • 15种高级RAG技术:从预检索到生成全面提升RAG效果
  • Java后端分布式系统的服务监控:Zabbix与Nagios
  • 图片尺寸缩放批量剪辑:高效方法与技巧分享
  • 《业务三板斧:定目标、抓过程、拿结果》读书笔记1
  • WooCommerce与wordpress是什么关系
  • 【Linux系统编程】第二十七弹---文件描述符与重定向:fd奥秘、dup2应用与Shell重定向实战
  • 【微服务】注册中心 - Eureka(day3)
  • Timer 计时器
  • 《蓝桥杯算法入门》(C/C++、Java、Python三个版本)24年10月出版
  • 华为OD机试 - 无向图染色(Python/JS/C/C++ 2024 E卷 100分)
  • 两个wordpress网站共用一个数据库的数据表
  • 如何对物理系统进行数学建模?
  • CSS属性 - animation
  • 14 Shell Script正则表达式
  • Navicat Premium 12 for Mac中文永久版
  • 鸿蒙HarmonyOS开发生态:构建万物互联的未来
  • java高并发场景RabbitMQ的使用
  • 360浏览器时不时打不开csdn
  • 大厂笔试现已经禁用本地IDE怎么看