crypto.computeSecret返回数字数组而不是字符串

时间:2017-03-20 20:44:05

标签: angularjs node.js

使用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调用 - 实际上使用相同的代码仍然给我一个数组。

1 个答案:

答案 0 :(得分:0)

我终于弄明白了这个问题。虽然我告诉它用十六进制做所有事情,但它实际上是将密钥作为缓冲区,所以我添加了.toString('hex')并最终转换为十六进制,我能够使用它。