Buffer in NodeJS 12 and NodeJS 8
My Simple Testing codes
> cat index.js
const size = 'hello'.length;
const AES_BLOCK_SIZE = 8;
const padLength = (size % AES_BLOCK_SIZE);
let encryptText = Buffer.alloc(size + padLength, '0x06', 'hex');
console.log(encryptText);
Version 8
> node --version
v8.14.1
Run it and it works
> node index.js
<Buffer 00 00 00 00 00 00 00 00 00 00>
Switch to version 12
> node --version
v12.14.1
It failed
> node index.js
buffer.js:999
throw new ERR_INVALID_ARG_VALUE('value', value);
^
TypeError [ERR_INVALID_ARG_VALUE]: The argument 'value' is invalid. Received '0x06'
at _fill (buffer.js:999:13)
at Function.alloc (buffer.js:348:12)
at Object.<anonymous> (/Users/hluo/work/nodejs/buffer/index.js:4:26)
at Module._compile (internal/modules/cjs/loader.js:955:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
at Module.load (internal/modules/cjs/loader.js:811:32)
at Function.Module._load (internal/modules/cjs/loader.js:723:14)
at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
at internal/main/run_main_module.js:17:11 {
code: 'ERR_INVALID_ARG_VALUE'
}
Understand HEX
ASCII: A (65)
Binary: 0100 _ 0001
Hex: 41
Change the script to be
> cat index.js
const size = 'hello'.length;
const AES_BLOCK_SIZE = 8;
const padLength = (size % AES_BLOCK_SIZE);
let encryptText = Buffer.alloc(size + padLength, 0x06, 'hex');
console.log(encryptText);
> node index.js
<Buffer 06 06 06 06 06 06 06 06 06 06>
With the help of nodenv, I can easily switch my nodeJS version and check
https://www.iteye.com/blog/sillycat-2512593
References:
https://nodejs.org/docs/latest-v8.x/api/buffer.html#buffer_class_method_buffer_alloc_size_fill_encoding
https://nodejs.org/docs/latest-v12.x/api/buffer.html#buffer_class_method_buffer_alloc_size_fill_encoding
https://www.jianshu.com/p/57c4e8d3f035
分享到:
相关推荐
- **注意**:Buffer中的数值超出8位(即255)会被截断,不会造成溢出错误,而是丢弃超出部分。 - **utf-8编码**:一个utf-8字符通常占用1至4个字节,但大部分常见字符占3个字节。在读取Buffer时,要考虑utf-8编码...
Buffer 作为 nodejs 中重要的概念和功能,为开发者提供了操作二进制的能力。本文记录了几个问题,来加深对 Buffer 的理解和使用: 认识缓冲器 如何申请堆外内存 如何计算字节长度 如何计算字节长度 如何转换...
JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一个与String对等的全局构造函数Buffer来提供对二进制数据的操作。除了可以读取文件得到Buffer的实例外,还能够直接构造,例如: 代码如下: ...
### NodeJS API参考手册 #### 关于文档 本文档为Node.js版本6.5.0的官方API参考手册。Node.js是一种开源、跨平台的JavaScript运行环境,它允许开发者使用JavaScript编写服务器端应用程序。该文档提供了详细的API...
客户端适配NodeJs::Buffer 入门 附在您的网页中: < script src =" dist/buffer.js " > </ script > 文档 (即将推出) 例子 (即将推出) 执照 版权所有 (c) 2012 Andrew Sednev 在 MIT 许可下获得...
`Buffer`对象与JavaScript中的字符串对象之间的转换需要指定编码方式,NodeJS支持多种编码方式,包括: - `'ascii'`:适用于7位ASCII数据,速度较快,但会忽略字节的高位。 - `'utf8'`:用于Unicode字符,很多网页...
随着TypedArray在ES6中的引入,Buffer类实际上是对Uint8Array的优化实现,更适合Node.js的特定需求。 Buffer对象是一个固定大小的内存块,其内存是在V8堆外分配的,这有助于提高处理二进制数据的效率。由于Buffer的...
aBuffer: new Buffer(10), anArray: [1, 'foo'], anObject: { a: 'foo', b: 12 } }; dotNetFunction(payload, function (error, result) { }); ``` 直接把数据和函数传入 C#,让 C# 回调 NodeJS 的函数。 Edge ...
因此,当我们要返回二进制数据给浏览器时,通常需要将Buffer转换成字符串格式,否则会引发错误。 Node.js实现返回图片给浏览器的步骤通常分为以下几个阶段: 1. 通过请求头获取请求的URL。 2. 判断URL对应的资源...
- **创建Buffer对象**:使用`Buffer.alloc(size, fill)`创建一个指定大小的Buffer对象,并用特定字符填充。 - **转换为字符串**:使用`buf.toString()`或`String(buf)`将Buffer对象转换为字符串。 ### 模块 在Node...
可以通过传入字符串和编码来创建Buffer,如`new Buffer('Hello World', 'utf8')`,这将创建一个包含字符串UTF-8编码的Buffer对象。 4. **读取与写入** 缓冲区支持读取和写入操作。例如,`buffer.write(string[, ...
### NODEjs API文档 #### 概述 本文档旨在为Node.js开发者提供全面且详细的API指南,涵盖了Node.js的核心功能、模块加载机制、全局对象、定时器、核心及文件模块等重要方面。通过深入理解这些内容,开发者可以更加...
- **buffer.write(string, offset=0, length=buffer.length-offset, encoding='utf8')**: 向Buffer写入数据。 通过以上对Node.js API文档部分内容的详细解析,我们可以看到Node.js提供了非常强大的功能集合,不仅...
最后,使用fs.writeFileSync方法将buffer写入名为'test1.xlsx'的新文件中。 具体代码如下: ```javascript var xlsx = require('node-xlsx'); var fs = require('fs'); // 读取文件内容 var obj = xlsx.parse(__...
res.setEncoding('utf-8'); res.on('data', function(chunk) { chunks.push(chunk); }); res.on('end', function() { var data = Buffer.concat(chunks); callback(data); }); } }); }; ``` 在上面的代码...
压缩包中包含的`NodeJs高级编程-英文版_sourcecode.zip`很可能是书中示例代码的源码,通过研究这些代码,你可以深入理解书中的示例,了解如何将理论知识应用到实际项目中。这些代码可能涵盖Node.js的各个方面,包括...
const iv = Buffer.alloc(8, 0); // 初始化向量,可以使用随机值 const key = Buffer.from('密钥字符串', 'utf8'); // 24字节的密钥,可以使用Buffer.from()转换 const cipher = crypto.createCipheriv('des-ede3...