如何创建hmac sha512哈希?

时间:2016-01-06 10:40:57

标签: firefox-addon-sdk

我正在开发一个插件并且必须创建一个hmac sha512哈希,但是jpm说无法找到加密模块(https://nodejs.org/api/crypto.html#crypto_crypto_createhmac_algorithm_key) - 我不能在firefox插件开发中使用标准节点模块吗?
对不起,我对此很新。
如果没有,是否有另一种方法来创建哈希?

3 个答案:

答案 0 :(得分:1)

只能使用npm-hoisted第三方SDK模块,目前此类型的模块不多,例如menuitem

如果你想创建哈希,那么你可以使用crypto.js库。但你不能直接在index.js中使用它。因为你必须创建页面工作者并在你想要创建哈希时进行消息传递。

要在index.js中创建页面工作程序,您的代码将如下所示:

var HashWorker = require('sdk/page-worker').Page({
   contentURL: "./hash.html",
   contentScriptFile :   ["./crypto.js","./myfile.js"]
});

在myfile.js中,您将使用crypto.js函数创建hash.Note所有文件hash.html,crypto.js和myfile.js必须位于您的插件的数据目录中。

hash.html会看起来像这样:

<html>
<head>
    <title></title>
</head>
<body>

</body>
</html>

完成所有这些设置后,您可以通过消息传递从index.js传递到myfile.js,反之亦然。

要创建某些东西的哈希值,您可以将消息发送到myfile.js,它们看起来像这样: index.js

//send message to myfile.js to create hash of some value
HashWorker.port.emit('createHash',{data : "whose hash to create"});

//message received from myfile.js containing hash of specified value
HashWorker.port.on('hash_result',function(message){
  console.log(message.hash);
});

在myfile.js中,消息传递将如下所示: myfile.js

//message received from index.js to create hash of specified value
self.port.on('createHash',function(message){
  var value = message.data
  var hash = ...//cryptojs function to create hash of above value.

  //send hash created to index.js
  self.port.emit('hash_result',{hash : hash});
});

答案 1 :(得分:0)

  

我不能在firefox插件开发中使用标准节点模块吗?

你的意思是core modules而不是你不能。

您需要look for与浏览器兼容的加密模块。这是one

答案 2 :(得分:0)

您可以使用Mozilla自己的Components

const { Cu } = require("chrome");
Cu.importGlobalProperties(["crypto"]);

crypto object导入插件。由于您刚刚提出要求,您可能会注意到如何将其用于create a hash。示例说明要像

一样使用它
function sha256(str) {
  // We transform the string into an arraybuffer.
  var buffer = new TextEncoder("utf-8").encode(str);
  return crypto.subtle.digest("SHA-256", buffer).then(function (hash) {
    // whatever you want to do with hash;
  });
}