Nodejs新人想用node.js实现下面的一些代码

Nodejs新人想用node.js实现下面的一些代码

下面是Crypto-JS照搬过来的,不过在node.js下貌似会不行

    function util_bytesToBase64(a) {
    if ("function" == typeof btoa) return btoa(f_bytesToString(a));
    for (var b = [], c = 0; c < a.length; c += 3) for (var d = a[c] << 16 | a[c + 1] << 8 | a[c + 2], e = 0; 4 > e; e++) 8 * c + 6 * e <= 8 * a.length ? b.push("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d >>> 6 * (3 - e) & 63)) : b.push("=");
    return b.join("");
}
    function util_hexToBytes(a) {
        for (var b = [], c = 0; c < a.length; c += 2) b.push(parseInt(a.substr(c, 2), 16));
        return b;
    }
    
    function util_bytesToHex(a) {
        for (var b = [], c = 0; c < a.length; c++) b.push((a[c] >>> 4).toString(16)),
        b.push((a[c] & 15).toString(16));
        return b.join("");
    }
    
    function charenc_UTF8_bytesToString(a){
        return decodeURIComponent(escape(f_bytesToString(a)));
    }
    
    function charenc_UTF8_stringToBytes(a) {
        return f_stringToBytes(unescape(encodeURIComponent(a)));
    }
    
    function f_stringToBytes(a) {
        for (var b = [], c = 0; c < a.length; c++) b.push(a.charCodeAt(c) & 255);
        return b;
    }
    
    function f_bytesToString(a) {
        for (var b = [], c = 0; c < a.length; c++) b.push(String.fromCharCode(a[c]));
        return b.join("");
    }
    function util_base64ToBytes(a) {
        if ("function" == typeof atob) return f_stringToBytes(atob(a));
        for (var a = a.replace(/[^A-Z0-9+\/]/ig, ""), b = [], c = 0, d = 0; c < a.length; d = ++c % 4) 0 != d && b.push(("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c - 1)) & Math.pow(2, -2 * d + 8) - 1) << 2 * d | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c)) >>> 6 - 2 * d);
        return b;
    }

报错:

SyntaxError: Unexpected token ) at Module.wrappedCompile [as _compile] (instance1/nodejs/runtime/src/sandbox/modules/module.js:104:24) at Object.Module._extensions…js (module.js:502:10) at Module.load (module.js:392:32) at Function.Module._load (module.js:350:12) at Module.require (module.js:398:17) at require (instance1/nodejs/runtime/src/sandbox/modules/module.js:42:15) at Object.<anonymous> (instance1/nodejs/test/app/routes/index.js:1:74) at Module.wrappedCompile [as _compile] (instance1/nodejs/runtime/src/sandbox/modules/module.js:118:25) at Object.Module._extensions…js (module.js:502:10) at Module.load (module.js:392:32)

新人不知道怎么解决好。无限感谢


6 回复

根据你提供的代码片段和错误信息,这段代码似乎是从一个浏览器环境中直接移植到 Node.js 环境中的。浏览器环境和 Node.js 环境之间存在一些差异,比如 btoaatob 这两个函数在浏览器中可用,在 Node.js 中则需要使用额外的库来实现类似的功能。

我们可以使用 buffer 模块来替代这些功能,并对代码进行适当的调整。以下是一个修改后的版本,旨在解决你在 Node.js 环境下的问题:

示例代码

首先确保安装了 buffer 模块(通常 Node.js 默认已包含):

npm install buffer

然后,可以使用以下代码替换你的原始代码:

const { Buffer } = require('buffer');

// 字节转 Base64
function bytesToBase64(bytes) {
    return Buffer.from(bytes).toString('base64');
}

// Hex 转字节
function hexToBytes(hex) {
    let bytes = [];
    for (let c = 0; c < hex.length; c += 2) {
        bytes.push(parseInt(hex.substr(c, 2), 16));
    }
    return bytes;
}

// 字节转 Hex
function bytesToHex(bytes) {
    return bytes.map(byte => byte.toString(16).padStart(2, '0')).join('');
}

// UTF-8 编码字符串转字节
function stringToBytes(str) {
    return Buffer.from(str, 'utf8').toString('binary').split('').map(char => char.charCodeAt(0) & 0xFF);
}

// 字节转 UTF-8 编码字符串
function bytesToString(bytes) {
    return Buffer.from(bytes, 'binary').toString('utf8');
}

// Base64 转字节
function base64ToBytes(base64) {
    return Buffer.from(base64, 'base64').toString('binary').split('').map(char => char.charCodeAt(0) & 0xFF);
}

解释

  1. bytesToBase64: 使用 Buffer.from(bytes).toString('base64') 将字节数组转换为 Base64 编码的字符串。
  2. hexToBytes: 遍历给定的十六进制字符串并将其转换为字节数组。
  3. bytesToHex: 将字节数组转换为十六进制字符串。
  4. stringToBytes: 使用 Buffer.from(str, 'utf8') 将字符串转换为字节数组。
  5. bytesToString: 将字节数组转换回字符串。
  6. base64ToBytes: 使用 Buffer.from(base64, 'base64') 将 Base64 编码的字符串转换为字节数组。

这样,你就可以在 Node.js 环境中正确地使用这些功能了。希望这能帮助你解决问题!


//将Ansi编码的字符串进行Base64编码 function encode64(input) { var keyStr = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=”; var output = “”; var chr1, chr2, chr3 = “”; var enc1, enc2, enc3, enc4 = “”; var i = 0;

do {
	chr1 = input.charCodeAt(i++);
	chr2 = input.charCodeAt(i++);
	chr3 = input.charCodeAt(i++);
enc1 = chr1 &gt;&gt; 2;
enc2 = ((chr1 &amp; 3) &lt;&lt; 4) | (chr2 &gt;&gt; 4);
enc3 = ((chr2 &amp; 15) &lt;&lt; 2) | (chr3 &gt;&gt; 6);
enc4 = chr3 &amp; 63;

if (isNaN(chr2)) {
	enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
	enc4 = 64;
}

output = output +
keyStr.charAt(enc1) +
keyStr.charAt(enc2) +
keyStr.charAt(enc3) +
keyStr.charAt(enc4);
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";

} while (i < input.length);

return output;

}

这个编码必须UTF-8的 一个是byte转Base64,另一个是Base64转byte 这个在前台js是没问题的。主要我是想在后台的node.js服务器也能执行

自己考代码 都考错了好不,还有语法错误

神马意思? 这段Crypto-JS是被改过的,不过还是可以用的。只是最近想移植到node.js都能用罢了 想用buffer来弄,但是还是少了点什么 这个主要是用来加密东西的

根据你的描述,错误可能是因为代码中使用了一些浏览器特有的API(如 btoaatob),而在Node.js环境中这些API是不可用的。我们可以使用Node.js的内置模块来实现相同的功能。

以下是一个简化的示例,展示如何在Node.js中实现上述功能:

示例代码

Base64 编码和解码

const { Buffer } = require('buffer');

function bytesToBase64(bytes) {
    return Buffer.from(bytes).toString('base64');
}

function base64ToBytes(base64) {
    return Buffer.from(base64, 'base64').toString();
}

// 示例
const bytes = [72, 101, 108, 108, 111]; // "Hello" 的字节表示
const base64 = bytesToBase64(bytes);
console.log(base64); // SGVsbG8=

const decodedBytes = base64ToBytes(base64);
console.log(decodedBytes); // Hello

Hex 转换为字节

function hexToBytes(hex) {
    let result = [];
    for (let i = 0; i < hex.length; i += 2) {
        result.push(parseInt(hex.substr(i, 2), 16));
    }
    return result;
}

// 示例
const hexString = "48656c6c6f"; // "Hello" 的十六进制表示
const bytes = hexToBytes(hexString);
console.log(bytes); // [72, 101, 108, 108, 111]

字节转为Hex

function bytesToHex(bytes) {
    return bytes.map(byte => byte.toString(16).padStart(2, '0')).join('');
}

// 示例
const bytes = [72, 101, 108, 108, 111];
const hexString = bytesToHex(bytes);
console.log(hexString); // 48656c6c6f

解释

  1. Base64 编码和解码:使用 Node.js 内置的 Buffer 模块来进行 Base64 编码和解码。
  2. Hex 转换为字节:遍历输入的十六进制字符串,并将其转换为对应的字节数组。
  3. 字节转为Hex:将字节数组转换为十六进制字符串。

通过这种方式,你可以避免使用浏览器特有的 API,并确保代码在 Node.js 环境中正常运行。

回到顶部