CJ *_*son 5 encryption postgresql aes node.js
问题:我们必须加密某个表(Postgres)上的某个列。它必须在 SQL 查询和我们的 Nodejs/sequelize 应用程序层中可解密。加密可以发生在任一层中,但必须可以从任一层中解码。
\n\n我遇到的问题(我确信这是用户错误)是,如果我在数据库中加密,我只能在数据库中解密,对于节点也是如此。
\n\n我尝试过在 postgres 和node中使用PGP_SYM_ENCRYPTand 。我已经得到它的解密没有错误,但返回乱码。ENCRYPTcryptocrypto-js/aes
到目前为止我尝试过的一些事情(测试键是thirtytwocharsthirtytwocharsplus):
set() {\n this.setDataValue('field', seq.cast(seq.fn('PGP_SYM_ENCRYPT', val, \n config.AES_KEY), 'text'))\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这正确地写入了字段,使得 PGP_SYM_DECRYPT 能够解密它,但是(显然?)没有办法告诉 Sequelize 用函数调用包装字段名称,所以我觉得有很多额外的 js 是可以避免的
\n\nconst decipher = crypto.createDecipher('aes256', config.AES_KEY)\ndecipher.setAutoPadding(false);\nreturn decipher.update(new Buffer(this.getDataValue('field', 'binary'), 'binary', 'ascii')) + decipher.final('ascii')\nRun Code Online (Sandbox Code Playgroud)\n\n这将解码该字段,但返回乱码 ( \xef\xbf\xbdMq\xef\xbf\xbd\xef\xbf\xbd8Ya\xef\xbf\xbdb) 而不是值 ( test)
aes.encrypt('test', config.AES_KEY)\naes.decrypt(field, config.AES_KEY).toString(CryptoJS.enc.Utf8)\nRun Code Online (Sandbox Code Playgroud)\n\n这可以很好地加密,解密也很好,但是 Postgres 在尝试解密时会出错(使用 或PGP_SYM_DECRYPT)DECRYPT。将结果字段转换::TEXT并粘贴到在线 AES 解密器中会返回预期值。
我真的想避免向我们的节点存储库/查询添加一堆样板,而且我真的觉得这应该可行。使用相同的加密算法应该产生相同的结果
\n\n任何推动或指示将不胜感激
\n好的,我已经成功了,希望能正常工作
我所做的是:
使用crypto.createCipheriv('aes-256-cbc', new Buffer(config.AES_KEY), iv)in node、encrypt_ivpgsql 加密并存储hex在 db 中,并使用crypto.createDecipheriv/解密decrypt_iv到text/utf8
我不知道我错过了哪一部分,但在指定aes256、使用iv方法和翻转十六进制/文本之间它似乎有效。
| 归档时间: |
|
| 查看次数: |
5491 次 |
| 最近记录: |