Node.js-解密加密字符串数组

时间:2020-09-14 15:46:08

标签: javascript node.js

几天前,我转到了Facebook的“安全和登录”页面。而且我注意到他们存储了我们的设备,以便我们可以控制使用我们Facebook帐户的设备。

我以为“也许我可以创建类似的东西”。

所以我创建了一个新的Node.js env并开始编码。

我的想法是,假设用户在数据库中已经有一些设备,所以我决定对其进行加密以使其更安全。

然后,当我向数据库请求获取存储的所有user_devices的数组时,它应如下所示:

const user_devices = [
  "972f2e0f09e944af2a51aae0608af08b",
  "1046f21afeda72b832a06dbcb3c713d5",
  "98905cfb376ceea05026cca6d46a660e"
];

然后,我想做一个foreach循环来解密它们,以使它们看起来像这样:

const user_devices = [
      "127.0.0.1",
      "127.0.0.2",
      "127.0.0.3"
    ];

然后我可以使用if语句来验证当前尝试访问用户帐户的用户设备是否已经保存在user_devices数组中。

如果没有,我将让当前的用户设备尝试访问该帐户,并将其加密并将其保存到user_devices数组中。

我希望你喜欢这个故事,我这样做是为了挑战自己?。

但是我得到了这个错误:

internal/crypto/cipher.js:164
  const ret = this._handle.final();

我不知道现在该怎么办?。

以下是代码:https://codesandbox.io/s/facebook-security-login-clone-s0y71?file=/src/index.js:148-286

1 个答案:

答案 0 :(得分:0)

加密和解密时需要使用相同的IV。同时,如果IV始终相同,则它是无用的。最佳做法是:

  • 每次需要加密新字符串时都创建一个新IV
  • 将IV附加到加密的字符串(也许只是将它们连接起来)并存储结果

当您需要解密时:

  • 再次分隔IV和加密的字符串
  • 使用刚刚分离的密钥和IV解密字符串