SuiteScript hmac sha256

Ari*_*med 2 netsuite suitescript suitescript2.0

我实际上正在开发一个基于 netsuite 产品的新项目。我正在尝试使用 hmac sha256 加密消息。

考虑到我有 stringToEncrypt 和密钥,最简单的方法是什么。

我已经阅读了 Netsuite 中的文档,但我仍然陷入困境......

有我的功能

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;
};
Run Code Online (Sandbox Code Playgroud)

当然,在这个词后面crypto我使用了模块'N/crypto'and encode 'N/encode'。多谢。

bkn*_*hts 5

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

缺少的是如何生成密钥的 guid。为此,您可以使用套房。注意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
        };
    });
Run Code Online (Sandbox Code Playgroud)

FWIW 加密在这里是错误的术语。您正在创建数据的哈希值,该哈希值将用于确保数据完整性。您无法解密哈希值。

生成密钥的 GUID 后,我只需将其存储在配置文件中(与上面的脚本列表中使用的文件相同。

在 TypeScript 中它看起来像:

/**
 * config.js
 * @NApiVersion 2.x
 */

export var config =  {

    'host': '162.242.144.xxx',
    'userName': 'unsername',
    'targetScript': ['customscript_transmit_dsv_943', 'customscript_transmit_dsv_940', 'customscript_retrieve_dsv_944'],
    'hostKey': 'AAAAB3Nza...Wz'
};
Run Code Online (Sandbox Code Playgroud)

然后,除了 config.xs 文件之外的所有内容都可以存储在版本控制中。需要对脚本中使用的文件适当设置受众。