0

请帮我解决这个问题。

var key = 'real secret keys should be long and random';

// Create an encryptor:
var encryptor = require('simple-encryptor')(key);

var encrypted = encryptor.encrypt('testing');
// Should print gibberish:
console.log('encrypted: %s', encrypted);

我在“NPM”上使用库:“simple-encryptor”,但每次我运行“加密”功能时,它都会输出不同的结果。

例如:
第一:“4792f3eacff628801005f14f1bc25ba0353…3e969662c4i/It97adse8M+1tmRHnYCQ==”
第二:“6c576df521df45cc48ffe594fbe13084353…66e3552bdaLoAV3rortuDbJYox=
1 (您可以在: https
://npm.runkit.com/simple-encryptor 上运行示例代码)

因此:当我将数据保存到本地并返回时,我无法解密这些数据。

为什么每次运行时加密的结果都不同?
在这种情况下如何解密数据?

4

2 回答 2

0

大多数加密算法都需要一个初始化向量 (IV)。IV 本身不敏感,通常与输出密文一起保存。在某些情况下,该库会为您处理此问题,并将其作为输出的一部分包含在内。

大概 IV 是由库随机生成的,以保护您免受由于密钥重用而导致的问题。每次运行脚本时,这个随机生成的 IV 都会导致输出不同。

于 2018-06-01T10:01:43.303 回答
0

默认情况下,simple-encryptor将使用 encrypt-then-mac 和 AES-256 和 SHA-256 HMAC。他们的文档说:

每次调用唯一的 IV,因此没有两个调用应该为相同的输入返回相同的结果

要解密加密数据,请使用encryptor.decrypt(encrypted);. 你可以用这个简单的例子来测试:

var encryptor = require("simple-encryptor")("somekey234567884456753456");

var encrypted = encryptor.encrypt('testing');

console.log(encrypted);

var decrypted = encryptor.decrypt(encrypted);

console.log(decrypted);
于 2018-06-01T10:02:14.360 回答