Windows11安装node.js——npm安装crypto-js库——实战某网址获取加密解密算法

一、安装环境

本教程演示的环境

系统:win 11 64位
node.js下载地址: http://nodejs.cn/
node.js版本:长期支持版本(本教程基于16.15.0)
二、安装步骤

1、双击安装包,一直点击下一步。

2、点击change按钮,更换到自己的指定安装位置,点击下一步(不修改默认位置也是可以的 )。

3、一直点击下一步,最后安装成功即可。

三、验证安装

1、在键盘按下【win+R】键,输入cmd,然后回车,打开命令行界面
2、进入命令提示符窗口,分别输入以下命令,显示版本号,则安装成功

node -v        显示安装的nodejs版本
npm -v        显示安装的npm版本
四、修改全局模块下载路径

1、我希望将全模块所在路径和缓存路径放在我node.js安装的文件夹中,则在我安装的文件夹【D:\DevTools\Environment\nodejs】下创建两个文件夹【node_global】及【node_cache】如下图:
在这里插入图片描述

创建完两个空文件夹之后,跟之前操作一样,在键盘按下【win+R】键,输入cmd,然后回车,打开命令行界面,输入下面命令。

prefix = 创建的node_global文件夹所在路径
cache  = 创建的node_cache文件夹所在路径
-------------------------------------------------------------------------------
npm config set prefix "D:\DevTools\Environment\nodejs\node_global"
npm config set cache "D:\DevTools\Environment\nodejs\node_cache"

2、修改系统环境变量
右键我的电脑,选择属性
在这里插入图片描述

在打开的窗口中选择高级系统设置
在这里插入图片描述
选择环境变量
在这里插入图片描述
选择系统变量的Path变量,新增node_global文件夹的路径
在这里插入图片描述
经过上面的步骤,nodejs下载的模块就会自动下载到我们自定义的目录,接下来我们测试一下。输入下面的命令:

npm install express -g     # -g是全局安装的意思,不加 -g 就是默认下载到当前目录

如图,下载成功,我们回到我们定义的目录查看。
可以看到,下载的express模块以及成功下载到全局的指定目录。
在这里插入图片描述
注:若执行命令npm install express -g 出现如下报错
在这里插入图片描述
是由于权限的原因,右击Nodejs文件夹->属性->安全,点击编辑,将所有权限都✔即可。
在这里插入图片描述

五、更换npm源为淘宝镜像

说明:npm 默认的 registry ,也就是下载 npm 包时是从国外的服务器下载,国内很慢,一般都会指向淘宝 https://registry.npm.taobao.org。 1、查看初始npm源,如图:

npm config get registry

2、更换镜像为淘宝镜像

npm config set registry https://registry.npm.taobao.org/

3、检查配置是否成功

npm config get registry
六、全局安装基于淘宝源的cnpm(或安装yarn也可以)

说明:由于npm的服务器在海外,所以访问速度比较慢,访问不稳定 ,cnpm的服务器是由淘宝团队提供 服务器在国内cnpm是npm镜像,一般会同步更新,相差在10分钟,所以cnpm在安装一些软件时候会比较有优势。但是一般cnpm只用于安装时候,所以在项目创建与卸载等相关操作时候我们还是使用npm。 1、全局安装基于淘宝源的cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

2、下载完后,我们在本地就能看到cnpm模块
在这里插入图片描述
3、执行命令查看cnpm是否安装成功

cnpm -v
 七、安装crypto-js库

crypto-js 是一个纯 javascript 写的加密算法类库 ,可以非常方便地在 javascript 进行 MD5SHA1SHA2SHA3RIPEMD-160 哈希散列,进行 AESDESRabbitRC4Triple DES 加解密。

npm install -g crypto-js
八、使用

ES6模块引入方法:

import sha256 from 'crypto-js/sha256';

import hmacSHA512 from 'crypto-js/hmac-sha512';

import Base64 from 'crypto-js/enc-base64';

模块加载引入方法:

import sha256 from 'crypto-js/sha256';

import hmacSHA512 from 'crypto-js/hmac-sha512';

import Base64 from 'crypto-js/enc-base64';

页面标签引入方法:

<script type="text/javascript" src="path-to/bower_components/crypto-js/crypto-js.js"></script>

<script type="text/javascript">

    var encrypted = CryptoJS.AES(...);

    var encrypted = CryptoJS.SHA256(...);

</script>
九、项目中使用实例

这里我以 React 作为例子,其他的也就大同小异了。

  • 第一步:封装工具类

我们可以写一个工具类,专门封装加密解密的方法,比如我新建一个 cryptoAES.js 的文件,放在 utils 目录下(放哪无所谓),代码如下:

const CryptoJS = require('crypto-js');  //引用AES源码js

    

const key = CryptoJS.enc.Utf8.parse("1234123412ABCDEF");  //十六位十六进制数作为密钥

const iv = CryptoJS.enc.Utf8.parse('ABCDEF1234123412');   //十六位十六进制数作为密钥偏移量


//解密方法

function (word) {

    let encryptedHexStr = CryptoJS.enc.Hex.parse(word);

    let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);

    let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });

    let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);

    return decryptedStr.toString();

}



//加密方法

function Encrypt(word) {

    let srcs = CryptoJS.enc.Utf8.parse(word);

    let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });

    return encrypted.ciphertext.toString().toUpperCase();

}


export default {

  Decrypt ,

  Encrypt

}

上面的代码中的 key 是密钥 ,iv 是密钥偏移量,这两个参数前后端协定好保持一致,相当是我们的小秘密,不能告诉别人,不然加密的意义就没了。

值得注意的是密钥的长度,由于对称解密使用的算法是 AES-128-CBC 算法,数据采用 PKCS#7 填充 , 因此这里的 key 需要为16位!

接着我们定义了解密方法 Decrypt 和加密方法 Encrypt,最后通过 export 和 default 将其暴露出去,方便在需要的时候进行引入....

工具类写好了,很简单,然后是怎么使用了~

  • 第二步:使用工具类

我们有一个 index.tsx 文件,在这里面使用加密和解密的方法。

这里我只演示加密,解密同理。


import { Decrypt, Encrypt } from '/utils /cryptoAES.js';

//比如我组装好了拼接的参数

const str = '103170,112425366,253.00,20210428173700'

Encrypt(str)

加密后的结果是:

hoDfJ9U+uY+v8wYKdudbTUR+Z7g1Ui9YraVhfD9g2fMipYlFxnoLE0qbf+YsnEuk

这里有个问题,加密后的字符串里面是包含了+号,发送的话,在进行地址解析时,会把 + 号转换为 空格, 直接导致参数不能正确传输,所以我们用到了 JS 的 encodeURIComponent(),将所有的 + 号 手动转换为 %2B 即可正常传输。

encodeURIComponent(str)

//返回新结果

hoDfJ9U%2BuY%2Bv8wYKdudbTUR%2BZ7g1Ui9YraVhfD9g2fMipYlFxnoLE0qbf%2BYsnEuk

好了,一个简单的前端加密的过程就写完了。

十、实战某网址获取加密算法

登录账户:user密码:123456  加密后的密码数据:A7428361DEF118911783F446A129FFCE

1、由此可见密码是在前端进行加密的,而且我们发现这是个xhr的请求

我们找到了加密模块,并跟踪进去

可以看出这便是他的加密模块,采用的加密方式是AEX,同时调用了crypto-js库。

 我们发现是encrypt的返回值正式我们的加密密码, 

这便是他的加密代码,继续深入把他加解密算法找出来


import CryptoJS from 'crypto-js'

const key = CryptoJS
  .enc
  .Utf8
  .parse("20171109124536982017110912453698");

const iv = CryptoJS
  .enc
  .Utf8
  .parse('2017110912453698'); //十六位十六进制数作为密钥偏移量

const encrypt = (word: string) => {
  let srcs = CryptoJS
    .enc
    .Utf8
    .parse(word);
  let encrypted = CryptoJS
    .AES
    .encrypt(srcs, key, {
      iv: iv,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    });
  return encrypted
    .ciphertext
    .toString()
    .toUpperCase();
}

export const passwordEncrypt = (password: string) => {
  if (typeof password === 'undefined') return undefined
  if (!password) return ''
  return encrypt(password)
}

 经过我们的不懈努力,终于找到了加解密的js文件

代码展示 

import CryptoJS from 'crypto-js'
const key = CryptoJS
    .enc
    .Utf8
    .parse("20171109124536982017110912453698");
const iv = CryptoJS
    .enc
    .Utf8
    .parse('2017110912453698'); //十六位十六进制数作为密钥偏移量
/**
 * @return {string}
 */
function Decrypt(word) {
    let encryptedHexStr = CryptoJS
        .enc
        .Hex
        .parse(word);
    let srcs = CryptoJS
        .enc
        .Base64
        .stringify(encryptedHexStr);
    let decrypt = CryptoJS
        .AES
        .decrypt(srcs, key, {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
    let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr.toString();
}

/**
 * @return {string}
 */
function Encrypt(word) {
    let srcs = CryptoJS
        .enc
        .Utf8
        .parse(word);
    let encrypted = CryptoJS
        .AES
        .encrypt(srcs, key, {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
    return encrypted
        .ciphertext
        .toString()
        .toUpperCase();
}

export {Decrypt, Encrypt}

A7428361DEF118911783F446A129FFCE  123456  至此结束

总结

  • 使用加密的场景有很多,我这里只讲述了URL地址加密的场景,简单总结下:

  • 第一步:安装 crypto-js

  • 第二步:引入 crypto-js

  • 第三步:封装工具类(当然也可以直接使用)

  • 第四步:调用工具类

  • 第五步:使用 encodeURIComponent 方法转码,然后拼接

当然,这个是最基础的用法,想深入可查看官方文档!

除了实战是自己写的外,其余都是选取以下链接:

至于为何选取,原因充当笔记

windows11安装nodejs详解_win11安装nodejs-优快云博客

加密解密之 crypto-js 知识-优快云博客

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值