Netsuite SuiteScript hmac sha256

Netsuite SuiteScript hmac sha256,netsuite,suitescript,suitescript2.0,Netsuite,Suitescript,Suitescript2.0,我实际上正在从事一个基于netsuite产品的新项目。 我正在尝试使用hmac sha256加密消息 考虑到我有密码和钥匙,简单的方法是什么 我已经阅读了Netsuite中的文档,但我仍然感到口吃 这是我的职责 function toHmacSHA256Base64(toCrypt, key) { var inputString = toCrypt; var myGuid = key; var sKey = crypto.createSecretK

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

考虑到我有密码和钥匙,简单的方法是什么

我已经阅读了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;
};
当然,在单词
crypto
后面,我使用模块
'N/crypto'
encode'N/encode'

Thx很多。

这大致正确,看起来与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
        };
    });
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'
};

然后,除了config.xs文件以外的所有文件都可以存储在版本控制中。需要对脚本中使用的文件进行适当的访问群体设置。

这大致正确,看起来与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 encrypt在这里是错误的术语。您正在创建用于确保数据完整性的数据哈希。您无法解密哈希

生成密钥的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'
};

然后,除了config.xs文件以外的所有文件都可以存储在版本控制中。需要对脚本中使用的文件进行适当的访问群体设置。

我正在尝试在RESTlet中计算HMAC,并且没有涉及任何表单。我正在尝试调用外部web服务,该web服务要求我发送HMAC.I在没有表单的情况下,ee无法创建secretKey。是吗?我想我必须从crypto js导入例程来完成这件简单的事情。表单只用于获取hmac密钥的密钥库引用一次。不过我已经使用了ss1和ss2的外部库路径,这也行得通。你是说这个方法perm吗立即在Netsuite中存储一个秘密,然后您可以使用返回的GUID引用该秘密?这些秘密在管理UI中的任何位置都可见吗?我已经搜索了文档和Netsuite,但找不到明显的位置来存储外部身份验证等用例的秘密。没错。返回的GUID是对上载的秘密的引用。您通过了吗您希望传递机密的Netsuite API的GUID。一旦这些机密存储在Netsuite中,您将如何管理它们?您是否需要在Netsuite之外的某个地方维护一个电子表格,以将您的GUID映射到它们包含的机密?我正在尝试在RESTlet中计算HMAC,并且没有涉及任何表单。我正在尝试o调用外部web服务,而该web服务要求我发送一个HMAC。我认为没有表单参与就无法创建secretKey。是吗?我想我必须从crypto js导入例程来完成这项简单的工作。表单只用于一次HMAC密钥的密钥库引用。我已经使用了外部但是ss1和ss2的库路由也是有效的。你是说这个方法在Netsuite中永久存储一个秘密,然后你可以用返回的GUID引用它吗?这些秘密在管理UI中的任何地方都可见吗?我搜索了文档和Netsuite,找不到明显的位置来存储诸如外部身份验证之类的用例的秘密诱惑。没错。返回的GUID是对上载的机密的引用。您将GUID传递给Netsuite的API,希望在其中传递机密。一旦这些机密存储在Netsuite中,您将如何管理它们?您是否需要在Netsuite之外的某处维护一个电子表格,以将您的GUID映射到它们包含的机密?