node.js中的util模块+crypto模块

Node-Forge:纯JavaScript密码学库的跨平台实践与核心应用 密码学是现代软件安全的基石,涉及数据加密、解密、签名与验证等核心操作,确保信息传输与存储的机密性、完整性和真实性。其基本原理基于数学算法,如对称加密(AES)、非对称加密(RSA)和哈希函数(SHA),通过密钥管理实现安全通信。在Web开发、Node.js服务及多端应用中,密码学的技术价值在于构建可信的数据处理管道。然而,环境差异常带来挑战:Node.js的crypto模块与浏览器Web Crypto API存在兼容性与一致性鸿沟,尤其在React Native、小程序或Serverless等异构场景下。N 阅读详情

一、util模块

node.js提供了很多模块,其中util就是nodejs核心模块之一,主要就是为了弥补js过于精简而造成的不足。

1. util.inspect

util.inspect(object,[showHidden],[depth],[colors])是一个将任意对象转换为字符串的方法,通常用于调试和错误输出。 
该方法最少接受一个参数object,showHidden可选,当值为true时,会打印出更多隐藏 的信息。depth是最大递归层数。 
可以指定层数,控制输出的信息,color为true 的时候,将以ANSI 颜色编码输出。

var util = require('util');

function Person() {
    this.name = 'WJ';
    this.toString = function() {
        return this.name;
    };
}
var obj = new Person();
console.log(util.inspect(obj)); /* Person { name: 'WJ', toString: [Function] } */

console.log(util.inspect(obj, true));//showHidden=true 输出更多信息
/* 
Person {
  name: 'WJ',
  toString:
   { [Function]
     [length]: 0,
     [name]: '',
     [arguments]: null,
     [caller]: null,
     [prototype]: { [constructor]: [Circular] } } }
 */

2.util.format

util.format(format[, …])格式化字符串,根据第一个参数,返回一个格式化字符串,类似printf的格式化输出。 传入的第一个参数是一个字符串,其中包含零个或多个占位符,format方法会将其中的每一个占位符被替换为与其对应的值后,输出结果。 format方法支持的占位符有: 
%s - 字符串. 
%d - 数字 (整型和浮点型). 
%j - JSON. 如果这个参数包含循环对象的引用,将会被替换成字符串 ‘[Circular]’。 
%% - 单独一个百分号(‘%’)。不会占用一个参数。 

代码实例

console.log(util.format('%s:%s', 'a',"b"));   // a:b
console.log(util.format('%s:%s:%j', 'a', 'b', 'c'));  // a:b:"c"
console.log(util.format(1, 2, 3));  // 1 2 3

3.util.inherits

util.inherits(constructor, superConstructor)是用来实现对象间原型继承的函数 

let util = require("util");
function WJ() {
    this.name = "WJ";
    this.one = "number";
    this.sayWho = function () {
        console.log("我是"+this.name);
    }
}
WJ.prototype.sayHello = function () {
    console.log(this.name);
};
function JJ() {
    this.name = "JJ";
}

util.inherits(JJ,WJ);

var WJobj = new WJ();

WJobj.sayHello();//WJ
WJobj.sayWho();//我是WJ
console.log(WJobj);//WJ { name: 'WJ', one: 'number', sayWho: [Function] }

var JJobj = new JJ();
JJobj.sayHello();//JJ
JJobj.one();//JJobj.one is not a function,这个JJobj函数只继承了WJ函数的原型中定义的函数,其他的都没有继承

二、crypto模块

不可反编译加密代码:

const crypto = require('crypto');
function l(param) {
    console.log(param);
}
const md5 = crypto.createHash('md5');//创建一个md5 hash算法
md5.update('aa');//添加要转化的值
md5.update('cc');//与前面的要转化的值进行拼接
l(md5.digest('hex'));//打印16进制的密文,
const sha1 = crypto.createHash('sha1');//创建一个sh1 hash算法
sha1.update('bbbb');
l(sha1.digest('hex'));
const hmac = crypto.createHmac('md5', 'key');//创建一个带秘钥的sha1或者md5算法
hmac.update('aacc');
l(hmac.digest('hex'));

可反编译的加密代码:

const crypto = require('crypto');
function l(param) {
    console.log(param);
}
function aesEncode(data, key) {
    const cipher = crypto.createCipher('aes192', key);
    var crypted = cipher.update(data, 'utf8', 'hex');
    crypted += cipher.final('hex');
    return crypted;
}
//创建解密算法
function aesDecode(encrypted, key) {
    const decipher = crypto.createDecipher('aes192', key);
    var decrypted = decipher.update(encrypted, 'hex', 'utf8');
    decrypted += decipher.final('utf8');
    return decrypted;
}
var data = 'I Love You';
var key = '123545';
l(aesEncode(data, key));
l(data);
l(aesDecode(aesEncode(data, key), key));

//输出======================
/* 
313d38ed64db44cb2c43b8c33feda5a1
I Love You
I Love You

*/

MD5加密算法

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Mit Laboratory for Computer Science和Rsa data security inc的Ronald l. rivest开发出来,经md2、md3和md4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被“压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数).不管是md2、md4还是md5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要.

MD5 算法的哈希值大小为 128 位。是一种不可逆的算法。

算法特点

  1. 两个不同的明文不会得到相同的输出值
  2. MD5结果不能反推明文,不可逆

安全性

从安全的角度讲,MD5的输出为128位,若采用纯强力攻击寻找一个消息具有给定Hash值的计算困难性为2128,用每秒可试验1000000000个消息的计算机需时1.07×1022年。若采用生日攻击法,寻找有相同Hash值的两个消息需要试验264个消息,用每秒可试验1000000000个消息的计算机需时585年。

实际应用上,例如我知道‘password’的MD5值是5f4dcc3b5aa765d61d8327deb882cf99,那么我就用一个数据库存起来,只要我看到5f4dcc3b5aa765d61d8327deb882cf99,我就知道这个是口令‘password‘使用MD5处理之后的值,原来的口令就是’password'。MD5在身份鉴别系统中用于口令保护已经是很久了事情了,大部分黑客也有针对这种Hash方式准备相应的数据库进行反查,这种数据库称为彩虹表,MD5的安全性大大减弱。

代码:

var crypto = require('crypto');
var content = 'password'
var md5 = crypto.createHash('md5');
md5.update(content);
var d = md5.digest('hex');  
console.log(d)//输出5f4dcc3b5aa765d61d8327deb882cf99 

SHA1算法

算法简介

SHA1的全称是Secure Hash Algorithm(安全哈希算法)。加密哈希函数将任意长度的二进制字符串映射为固定长度的小型二进制字符串。加密哈希函数有这样一个属性:在计算上不大可能找到散列为相同的值的两个不同的输入;也就是说,两组数据的哈希值仅在对应的数据也匹配时才会匹配。数据的少量更改会在哈希值中产生不可预知的大量更改。所以你很难从加密后的文字中找到蛛丝马迹。

SHA1 算法的哈希值大小为 160 位。是一种不可逆的算法。

代码:

var crypto = require('crypto');
var content = 'password'
var shasum = crypto.createHash('sha1');
shasum.update(content);
var d = shasum.digest('hex');
console.log(d)//输出5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8

MD5与sha1的不同

  1. MD5 使用小端排序LITTLE-ENDIAN,sha1 使用大端排序BIG-ENDIAN
  2. MD5最后生成的摘要信息是16个字节,SHA1是20个字节。

 

 

Vue项目前端加密实战:MD5、Crypto-js与国密SM3/SM4应用指南 前端加密是构建现代Web应用安全纵深防御体系的重要环节,其核心原理在于在数据离开客户端前,通过密码学算法对其进行变换,以保护敏感信息。从技术价值看,它不仅能防止明文数据在传输过程中被窥探(即使有HTTPS),也能为本地存储的数据增加一层保护,并满足特定行业的合规性要求。在实际工程中,开发者常根据场景选用不同方案:例如,使用Crypto-js库的AES算法对本地存储的Token进行加密,或采用国密SM3哈希算法处理登录密码以满足金融政务领域的监管要求。本文聚焦于在Vue.js项目中,如何针对不同安全需求,系统 阅读详情

相关推荐

Node.js常用的核心模块和服务器搭建详解

通过使用http模块,我们可以轻松创建一个基本的Web服务器,并处理请求和发送响应。Node.js的核心模块提供了丰富的功能,可以满足大部分服务器应用程序的需求。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它提供了丰富的内置模块,使得开发者可以轻松构建功能强大的服务器应用程序。本文将介绍Node.js常用的核心模块,并结合实例演示如何搭建一个简单的服务器。Node.js提供了许多内置的核心模块,用于处理各种任务,包括文件操作、网络通信、加密解密等。

OUDKE的博客 197

crypto加密

背景   在与三方系统的对接中,需要生成sign签名,其中使用到了crypto加密、HMAC签名、sha1加密方法。 前言 crypto 模块提供了加密功能,包括对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。   先解释一下官网中的代码: // 引入crypto模块进入项目中 const crypto = require('crypto'); // 要加密...

愿历尽千帆,仍保持最初的热爱,奔赴每一场山海,一如既往鲜活而明亮~ 2586

海康工业相机 Could not find module MvCameraControl.dll(已解决)

【代码】海康摄像机 Could not find module MvCameraControl.dll(已解决)

hmbbpdx的博客 2223

超级实用!详解Node.js中的util模块和express模块

util 模块提供了一个 inherits 函数,用于实现对象间的继承关系。这个函数可以将一个构造函数从一个原型继承到另一个构造函数的原型链上。

你若盛开,清风自来 1416

Robocup3d

一、 比赛介绍 RoboCup 仿真比赛是一个能为多智能体系统和模拟智能进行研究、教育的工具。比赛是在一个标准的计算机环境中进行的,提供了一个完全分布式控制、实时异步多智能体环境。通过这个平台,可以测试各种理论、算法和Agent体系结构。在实时异步、有噪声的对抗环境中,研究多智能体的合作对抗问题。当然,仿真组的比赛使用的机器人并非是真的机器人。一个机器人是一个Agent, 它拥有自己的大脑,

zhanghe2775115的专栏 7265

VMware vCenter 6.7证书过期急救指南:从503报错到完美修复的全流程

本文详细解析了VMware vCenter 6.7因STS证书过期导致503报错的根本原因,并提供了一套从诊断到修复的完整实战流程。内容包括使用checksts.py脚本检测STS证书状态,通过fixsts.sh脚本更新证书,以及利用Certificate-Manager全面重置所有过期证书,帮助管理员快速恢复服务并避免常见陷阱。

weixin_29234239的博客 770

nodejs工具模块学习

util 是一个Node.js 核心模块,提供常用函数的集合;

bcbobo21cn的专栏 403

ENVI哨兵一号数据处理

使用ENVI+SarScape处理哨兵数据

Rjjjjj11的博客 2万+

nodejs中,使用util.inspect打印输出对象里边的详细内容,而不是打印输出[object Object]

【代码】nodejs中,使用util.inspect打印输出对象里边的详细内容,而不是打印输出[object Object]

m0_74176885的博客 441

2017–2024年中国10米/20米分辨率水稻种植分布数据集

摘要:本数据集提供2017-2024年中国23个省级行政区的水稻种植分布数据,包含单季稻和双季稻分类(GeoTIFF格式,WGS84坐标系)。5个省份分辨率为20米,其余为10米,基于Sentinel卫星数据和TWDTW方法生成。数据公开共享(7.99GB),使用需注明来源并引用相关文献(DOI:10.12199/nesdc.ecodb.rs.2025.012)。涉及学科包括遥感、生态学和地理学,研究成果需发送至国家生态科学数据中心备案。

国科大硕士在读,分享Python/GEE/Matlab/R专业代码实践,涵盖数据分析、算法开发与应用技巧等,以代码会友。 1383

高通平台开发系列讲解(USB篇)MBIM协议详解

📢本文主要介绍高通平台USB网卡MBIM协议。

内核笔记 5438

node.js----util.inspect

是一个将任意对象转换 为字符串的方法,通常用于调试和错误输出。它至少接受一个参数 object,即要转换的对象。 showHidden 是一个可选参数,如果值为 true,将会输出更多隐藏信息。 var util=require('util'); function Person(){ this.name='byvoid'; this.toString=function(){ return this.name; }; } var obj=new Person();

weixin_45843676的博客 636

SIMATIC WINCC V8.0安装教程(Win11系统)

SIMATIC WINCC V8.0安装教程(Win11系统)

Robot_PLC_HMI_Automation 9046

别再乱试了!Mamba项目causal_conv1d安装失败?这才是正确的whl文件下载与安装指南

本文提供了Mamba项目中causal_conv1d安装失败的精准解决方案,详细解析了whl文件下载与安装的正确方法。通过环境配置检查、whl文件命名规则解码、GitHub Releases页面定位及手动安装步骤,帮助开发者避免常见的TypeError和环境搭建问题,确保causal_conv1d顺利运行。

weixin_30786657的博客 375

python如何给声音增加回声效果

创建任何声音对象的回声效果。使用sndarray和numpy来创建原始声音的偏移和衰减副本。目前它只是使用硬编码的值来设置回声的数量和延迟。你可以根据自己的需要轻松地重新创建。这段注释说明了make_echo函数的用途和实现方式,即通过pygame的sndarray模块和numpy库来处理声音数据,生成具有回声效果的声音。函数中使用了固定的回声数量和延迟时间,但这些值可以根据用户的需求进行调整。

zhangzhechun的专栏 977

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

[Node.js] Node Util Promisify - How to Convert Callback Based APIs to Promise-based

Since Node.js V8.0+, it introduces a 'util' libaray, which has a 'promisfy' function.  It can conver a callback based function to promise based function: const util = require('util'); const crypt...

weixin_33696822的博客 133

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

前端之node.js内置模块

Node.js内置了许多常用的模块,它们可以直接在应用程序中使用,无需额外安装。以下是一些常用的Node.js内置模块的介绍:fs模块:提供了文件系统相关的功能,可以进行文件的读写、复制、删除等操作。path模块:用于处理文件路径的相关操作,例如获取文件名、扩展名,拼接路径等。http模块:用于创建HTTP服务器和客户端,可以处理HTTP请求、响应以及路由等。events模块:用于处理事件的模块,可以实现事件的注册、触发和监听等。

m0_74242675的博客 1454

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Node-Forge性能终极测试与优化指南:对比Web Crypto API等主流加密库

在现代Web开发中,数据安全是核心需求,前端加密技术因此成为必备能力。其原理是通过密码学算法在客户端对敏感信息进行保护,防止数据在传输和存储过程中被窃取或篡改。这项技术的价值在于实现端到端的安全保障,提升应用的整体安全水位。它广泛应用于用户登录认证、敏感数据传输、本地数据加密等场景。本文聚焦于JavaScript加密库的性能评估与优化,通过横向对比Node-Forge、Web Crypto API、crypto-js等主流方案,深入分析不同算法(如AES-GCM、RSA)与场景下的性能表现,并针对Node-

sunjhgq的专栏 740

Node.js 内置模块

这些内置模块覆盖了 Node.js 中的许多核心功能,从文件系统操作到网络编程,再到数据加密和解密。了解这些模块的基本用法将极大地提高你的开发效率。根据你的项目需求,你可能还会使用其他的内置模块和技术。

qq_33240556的博客 529

学习:0基础学习Node.js,NodeJs后端快速入门(2)

node:fs模块能够以标准 POSIX 函数为模型的方式与文件系统进行交互。path获取文件或目录详细信息oldPathnewPathpath。

Nan_Shu_614的博客 1155

Node.js入门教程(二十六):内置模块

全面了解 Node.js 自带的常用核心模块

Smell_of_earth的博客 255

unenv夜版尝鲜:抢先体验Node.js兼容性的最新特性与改进

想要在浏览器、边缘计算环境中无缝运行Node.js应用吗?unenv夜版为您带来了革命性的Node.js兼容性解决方案!作为一款强大的JavaScript运行时兼容工具,unenv让您能够在任何JavaScript环境中运行Node.js代码,包括浏览器、边缘工作者等非Node.js环境。本文将带您深入了解unenv夜版的独特魅力,抢先体验这个终极Node.js兼容工具的最新特性和改进。 ##

gitblog_00343的博客 811

ext js 选择本地路径_这6个很有用的Node.js内部模块,你都会用吗?

1. OSWeb浏览器中的JavaScript无法获取有关操作系统(OS)的信息,但Node可以const os = require('os');console.log('操作系统信息 -------------');os.arch(); // x64os.platform(); // win32os.type(); // Windows_NTos.uptime(); // 53354.54328...

weixin_39765209的博客 141

Node常用模块简介

戳蓝字"前端优选"关注我们哦!在学习开发node过程中,会发现node不仅自己内置了相当多的工具模块,还有更多的第三方应用模块,如果你了解了这些模块的功能,在node的天...

webyouxuan的博客 332
上一篇: node.js中fs模块+path模块
下一篇: node.js中的buffer模块
晶球
博客等级 码龄9年 4粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值