2017-10-05 115 views
0

我实际上正在研究一个基于netsuite产品的新项目。 我试图使用hmac sha256加密一条消息。SuiteScript hmac sha256

考虑到我有stringToEncrypt和一个密钥,简单的方法是什么?

我读过的NetSuite的文档,但我仍然stucked ...

还有就是我的功能

function toHmacSHA256Base64(toCrypt, key) { 
     var inputString = toCrypt; 
     var myGuid = key; 
     var sKey = crypto.createSecretKey({ 
      guid: myGuid, 
      encoding: encode.Encoding.UTF_8 
     }); 
     var hmacSHA256 = crypto.createHmac({ 
      algorithm: 'SHA256', 
      key: sKey 
     }); 
     hmacSHA256.update({ 
      input: inputString, 
      inputEncoding: encode.Encoding.BASE_64 
     }); 
     var digestSHA256 = hmacSHA256.digest({ 
      outputEncoding: encode.Encoding.HEX 
     }); 
     return digestSHA256; 
}; 
当然

crypto后面我用的模块'N/crypto'encode 'N/encode'。 Thx很多。

回答

0

这大致正确,看起来完全像NS帮助中的示例。如果你有一个字符串,那么你可能需要inputEncoding:encode.Encoding.UTF_8来进行更新调用。

缺少的是如何生成密钥的guid。 因为你使用了一个suitelet。需要注意的NS帮助addSecretKeyField不是addCredentialField

/** 
*@NApiVersion 2.x 
*@NScriptType Suitelet 
*/ 
define(['N/ui/serverWidget', './config.js'], 
    function(serverWidget, config) { 
     function onRequest(context) { 
      if (context.request.method === 'GET') { 
       var form = serverWidget.createForm({ 
        title: 'SFTP Password' 
       }); 

       form.addSecretKeyField({ 
        id : 'username', 
        label : 'Pwd', 
        restrictToScriptIds : config.targetScript, 
        restrictToCurrentUser : false 
       }); 
       form.addSubmitButton({ 
        label: 'Submit Button' 
       }); 

       context.response.writePage(form); 
      } else { 
       var textField = context.request.parameters.username; 
       context.response.write('You have entered: ' + textField); 
      } 
     } 

     return { 
      onRequest: onRequest 
     }; 
    }); 

FWIW加密是错误术语在这里。您正在创建将用于确保数据完整性的数据散列。你不能解密一个散列。

+0

我试图计算一个RESTlet中的HMAC,并没有涉及任何形式。我试图呼叫外部Web服务,并且该Web服务要求我发送HM​​AC。如果没有涉及表单,我看不出创建secretKey的方法。在那儿?我想我将不得不从crypto-js导入例程来做这件简单的事情。 –

+0

该表单仅用于获取hmac密钥的密钥库参考。虽然我已经去了ss1和ss2的外部库路线,那也是可行的 – bknights

相关问题