首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SuiteScript hmac sha256

SuiteScript hmac sha256
EN

Stack Overflow用户
提问于 2017-10-05 20:22:26
回答 1查看 2.2K关注 0票数 1

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

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

我已经读过Netsuite的文档了,但我还是不明白……

这是我的功能

代码语言:javascript
复制
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'。非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2017-10-06 03:46:31

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

缺少的是如何生成密钥的guid。为了达到这个目的,你使用了一个手提箱。请注意NS帮助的addSecretKeyField而不是addCredentialField

代码语言:javascript
复制
/**
 *@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中,它看起来像这样:

代码语言:javascript
复制
/**
 * 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文件之外的所有内容都可以存储在版本控制中。需要在脚本中使用的文件上适当设置受众。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46585524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档