2013-07-19 91 views
1

我正在使用crypto模塊來創建salt和哈希以存儲在我的數據庫中。我正在使用SHA-512,如果這是相關的。從node.js插入二進制到MySQL

我有一個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)秒。

我正在使用mysql模塊(require('mysql'))添加該行。如何包含二進制文件以便插入?

+0

爲什麼不將二進制數據作爲字符串存儲在十六進制或Base64中? – rossum

+0

數據效率。這並不是什麼重要的事情,但我覺得避免使用效率低下的數據結構是最好的做法。 –

回答

3

首先,我不再使用mysql模塊,而是使用mysql2模塊(因爲它支持預準備語句)。這個問題幾乎沒有改變,但我想提一下,閱讀這些使用'mysql'的人應該使用'mysql2'。

其次,這兩個模塊都可以將緩衝區作爲這些字段的參數。這工作完美。做我本來試圖做的,我有這樣的:

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

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

此外,我並沒有意識到加密「消化」功能必須不帶參數,這是因爲返回的默認行爲一個緩衝區。

這不是最好的措辭答案,但那是因爲似乎沒有人關注這個問題,這是我的問題。 :)如果你想要更多的澄清,隨時發表評論。