【问题标题】:Inserting binary into MySQL from node.js从 node.js 将二进制文件插入 MySQL
【发布时间】:2013-07-19 03:57:48
【问题描述】:

我正在使用加密模块来创建盐和哈希值以存储在我的数据库中。如果相关,我正在使用 SHA-512。

我拥有的是一个 64 字节的盐,目前采用“SlowBuffer”的形式,由crypto.randomBytes(64, . . .) 创建。示例:

<SlowBuffer 91 0d e9 23 c0 8e 8c 32 5c d6 0b 1e 2c f0 30 0c 17 95 5c c3 95 41 fd 1e e7 6f 6e f0 19 b6 34 1a d0 51 d3 b2 8d 32 2d b8 cd be c8 92 e3 e5 48 93 f6 a7 81 ...>

我还有一个 64 字节的散列,目前是一个字符串。示例:

'de4c2ff99fb34242646a324885db79ca9ef82a5f4b36c657b83ecf6931c008de87b6daf99a1c46336f36687d0ab1fc9b91f5bc07e7c3913bec3844993fd2fbad'

在我的数据库中,我有两个字段,称为 passhash 和 passsalt,它们是 binary(64)s。

我正在使用 mysql 模块 (require('mysql')) 添加行。如何包含要插入的二进制文件?

【问题讨论】:

  • 为什么不将二进制数据存储为十六进制或 Base64 的字符串?
  • 数据效率。这并不重要或任何事情,但我觉得避免使用效率较低的数据结构是更好的做法。

标签: mysql node.js cryptography


【解决方案1】:

首先,我不再使用mysql模块,而是mysql2模块(因为它支持prepared statements)。这对这个问题几乎没有任何改变,但我想提一下,那些正在阅读本文的使用“mysql”的人可能应该使用“mysql2”。

其次,这两个模块都可以将 Buffers 作为这些字段的参数。这完美地工作。为了做我最初想做的事情,我有这样的:

var hash; //Pretend initialized as a 64-bit buffer
var salt; //" "

connection.query('insert into users set?', {..., passhash: hash, passsalt: salt,..., callback});

另外,我没有意识到加密“digest”函数有一个没有参数的默认行为,即作为缓冲区返回。

这不是最好的答案,但那是因为似乎没有人关注这个问题,而这是我的问题。 :) 如果您想了解更多信息,请随时发表评论。

【讨论】:

    猜你喜欢
    • 2015-07-22
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多