2017-10-05 4 views
0

Je travaille actuellement sur un nouveau projet basé sur le produit netsuite. J'essaye de crypter un message en utilisant hmac sha256.SuiteScript hmac sha256

Quelle est la façon simple de le faire étant donné que j'ai le stringToEncrypt et une clé.

J'ai lu la documentation NetSuite mais je suis toujours stucked ...

Il est ma fonction

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; 
}; 

bien sûr derrière le mot crypto utiliser le module 'N/crypto' et encode 'N/encode'. Merci beaucoup.

Répondre

0

C'est à peu près correct et ressemble exactement à l'échantillon de l'aide NS. Si vous avez une chaîne alors vous voulez probablement inputEncoding:encode.Encoding.UTF_8 pour l'appel de mise à jour.

Ce qui manque, c'est comment générer le guid de la clé secrète. Pour cela vous utilisez un suitelet. Notez le addSecretKeyField pas addCredentialField de l'aide NS:

/** 
*@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 Crypter est le bon terme ici. Vous créez un hachage des données qui seront utilisées pour garantir l'intégrité des données. Vous ne pouvez pas déchiffrer un hachage.

+0

Je tente de calculer un HMAC dans un RESTlet, et il n'y a pas de formulaire impliqué. Je tente d'appeler un service Web externe, et ce service Web nécessite que j'envoie un HMAC. Je ne vois aucun moyen de créer la clé secrète sans qu'un formulaire soit impliqué. Y a-t-il? Je pense que je vais devoir importer des routines de crypto-js pour faire cette chose simple. –

+0

Le formulaire est simplement utilisé une fois pour obtenir une référence de magasin de clés pour la clé hmac. Je suis allé la route de la bibliothèque externe à la fois pour SS1 et SS2 et cela fonctionne aussi – bknights