Node.js 如何在nodejs中加密和解密字符串/对象
我想加密一个对象,然后解密它。加密效果很好,但解密失败。下面是我的代码: crypto_ext.jsNode.js 如何在nodejs中加密和解密字符串/对象,node.js,encryption,cryptojs,node-crypto,Node.js,Encryption,Cryptojs,Node Crypto,我想加密一个对象,然后解密它。加密效果很好,但解密失败。下面是我的代码: crypto_ext.js const crypto = require("crypto") const password = "shared_key" const algorithm = "aes256" export const encrypt = (text) => { if(!text) return '' const cipher = crypto.createCipher(algorit
const crypto = require("crypto")
const password = "shared_key"
const algorithm = "aes256"
export const encrypt = (text) => {
if(!text) return ''
const cipher = crypto.createCipher(algorithm, password);
let crypted = cipher.update(text, 'utf-8', 'base64');
crypted += cipher.final('base64');
return crypted;
}
export const decrypt = (text) => {
if(!text) return ''
const decipher = crypto.createDecipher(algorithm, password);
let decrypted = decipher.update(text, 'base64', 'utf-8');
decrypted += decipher.final('utf-8');
return decrypted;
}
在我的test.js中,我有:
import {encrypt, decrypt} from './crypto_ext.js'
let test = {key1: val1, key2: val2}
test = encrypt(JSON.stringify(test)) || test
console.log("Encrypt : ", test)
console.log("Decrypt : ", decrypt(test)) // I should have my object as string here
这就是我得到的错误:
Uncaught Error: unable to decrypt data
at unpad (decrypter.js:83)
at Decipher.webpackJsonp../node_modules/browserify-aes/decrypter.js.Decipher._final (decrypter.js:38)
at Decipher.webpackJsonp../node_modules/cipher-base/index.js.CipherBase._finalOrDigest (index.js:76)
at decrypt (crypto_ext.js:17)
...
你能告诉我我做错了什么吗?尝试使用“bcrypt”软件包,它将帮助你加密密码。 如果要对数据进行加密。然后使用加密或节点rsa 链接
依赖项:
crypto
包
您可以使用以下代码实现编码和解码:-
const crypto = require('crypto');
var password = 'ojisdasjdsjabdjs';
var iv = 'kiamdksndn';
function sha1(input) {
return crypto.createHash('sha1').update(input).digest();
}
function password_derive_bytes(password, salt, iterations, len) {
var key = Buffer.from(password + salt);
for (var i = 0; i < iterations; i++) {
key = sha1(key);
}
if (key.length < len) {
var hx = password_derive_bytes(password, salt, iterations - 1, 20);
for (var counter = 1; key.length < len; ++counter) {
key = Buffer.concat([key, sha1(Buffer.concat([Buffer.from(counter.toString()), hx]))]);
}
}
return Buffer.alloc(len, key);
}
async function encode(string) {
var key = password_derive_bytes(password, '', 100, 32);
var cipher = crypto.createCipheriv('aes-256-cbc', key, Buffer.from(iv));
var part1 = cipher.update(string, 'utf8');
var part2 = cipher.final();
const encrypted = Buffer.concat([part1, part2]).toString('base64');
return encrypted;
}
async function decode(string) {
var key = password_derive_bytes(password, '', 100, 32);
var decipher = crypto.createDecipheriv('aes-256-cbc', key, Buffer.from(iv));
var decrypted = decipher.update(string, 'base64', 'utf8');
decrypted += decipher.final();
return decrypted;
}
用于解码
await decode('encoded_string_to_decode');
bcrypt是密码哈希/KDF,与加密/解密无关。嘿,Shraddha。感谢您的反馈,但此模块对于密码加密更有用。我想做的是首先加密我的字符串,并将其作为URL中的参数传递,根据此参数,我可以解密它并在其他页面中显示其内容。嗨,现在我了解您在这里实际查找的内容。我简略地读了你的描述,因此得出了错误的答案。您可以尝试“”此包节点RSA我用来加密和解密我的数据。@MariaMinh您能告诉我您正在使用哪个包吗?因为crypto现在已不推荐使用。Crypto.js是一个新的one@ShraddhaGoel我使用了Crypto.js,但在解密过程中遇到了另一个错误。我得到了“错误:格式错误的UTF-8数据”…为什么在
test=encrypt(JSON.stringify(test))| | test
中有| | test
?我测试了你的代码,它工作了。
await decode('encoded_string_to_decode');