使用Node的加密,当我在Node中记录结果时,它们会更正,但是当我将数据传递到前端(Angular)然后记录结果时,它会给出一个数组。代码几乎完全相同。有人能告诉我它为什么给我一个数组而不是字符串吗?
节点:
app.get('/crypto', function(req, res) {
var group = 'modp5';
var aliceDH = crypto.getDiffieHellman(group);
var bobDH = crypto.getDiffieHellman(group);
aliceDH.generateKeys();
bobDH.generateKeys();
var publicKeys = aliceDH.getPublicKey('hex')
console.log('pubkey: ', publicKeys)
var bobSecret = bobDH.computeSecret(publicKeys, 'hex', 'hex')
console.trace('Bob: ', bobSecret)
res.send(publicKeys)
})
日志:
pubkey: 72544df4dbc54e575814a1181eb42540d9220ce12ae47fac062ddd3c2f0c32a8793cfbf68099bebf0cef7aab52189c64e4830327d5bdc3d01f9a698ce86280c92ae9942a774f26b892635836b6bea5a413dc183c3cbfeca5e393e019e9940f47d9cc2d9657a03dc77a386c3892e40e1d23507a28ba285a43e90f817b76c8afd420bcedd0f808487133c17e215b0f5e0a5548a25558f8958a2b5e065c35c409d5db86680aab5499dbf8190677ef4225c93ef43e7b73b8ee69c941d16d292e879d
Bob: 6b078a9ce92b1f272930428cc0b6fc671eb377d936bbe37caffadd5d9d69755afd088236c73a3be8e86009b5de4dc7d32f4389129e332096e7064256469a700158a67cd1e1f59e25cdd135cb0c03bc904e8c5f571ed2c6662fbe8053396ec8dd5082787277644e592957546b43064d4fc9ea79def463e1092d0f54d62dad35a80e1896aeabadf7b44621090e52f45e422c7a0ffbfb9448b94c1c9afed08c4e97a27ba49115c2f87bf7b6547e8fa0b6011672d1ba4442e00bd4caac0f99f44428
角:
$http.get('/crypto').then(function (res) {
var key = res.data
console.log(key)
var group = 'modp5';
var bobDH = crypto.getDiffieHellman(group);
bobDH.generateKeys();
var bobSecret = bobDH.computeSecret(key, 'hex', 'hex')
console.log(bobSecret)
日志:
72544df4dbc54e575814a1181eb42540d9220ce12ae47fac062ddd3c2f0c32a8793cfbf68099bebf0cef7aab52189c64e4830327d5bdc3d01f9a698ce86280c92ae9942a774f26b892635836b6bea5a413dc183c3cbfeca5e393e019e9940f47d9cc2d9657a03dc77a386c3892e40e1d23507a28ba285a43e90f817b76c8afd420bcedd0f808487133c17e215b0f5e0a5548a25558f8958a2b5e065c35c409d5db86680aab5499dbf8190677ef4225c93ef43e7b73b8ee69c941d16d292e879d
[174, 55, 88, 166, 67, 161, 206, 242, 245, 45, 4, 212, 164, 86, 84, 227, 65, 87, 190, 127, 204, 185, 217, 9, 66, 239, 242, 36, 211, 133, 195, 17, 208...]
我猜它与我如何传递公钥有关,但我似乎无法弄清问题是什么。看起来很好,但我无法在任何地方找到解决方案。我在SO上找到了完全相同的问题,但没有回答。
SIDE NOTE:节点版本为0.12.16,Angular版本为1.4.7
编辑:对此进行更多测试,我发现使用Node端的EXACT SAME CODE仍然可以为我提供一个数组。所以甚至没有做一个http调用 - 实际上使用相同的代码仍然给我一个数组。
答案 0 :(得分:0)
我终于弄明白了这个问题。虽然我告诉它用十六进制做所有事情,但它实际上是将密钥作为缓冲区,所以我添加了.toString('hex')
并最终转换为十六进制,我能够使用它。