首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在BASE64或javascript中解码私钥的NetSuite、PCKS-8表示?

如何在BASE64或javascript中解码私钥的NetSuite、PCKS-8表示?
EN

Stack Overflow用户
提问于 2017-02-23 13:10:28
回答 2查看 721关注 0票数 2

我正在编写一份成绩单,以便将NetSuite与沃尔玛市场API集成起来。而且,正如另一个OP 这里所说的那样,他们的文档很大程度上说,如果您不使用Java,您就只能靠自己了。

我正在寻找一种方法,以同样的方式,无论是在行李本或javascript。

来自沃尔玛API文档的说明:

通过以下方式对此数据的字节数组表示形式进行签名: 解码基地64,PKCS-8表示您的私钥。注意,密钥是使用PKCS-8编码的。各种语言的库提供了一种能力,可以指定键是这种格式的,而不是其他冲突的格式,例如PKCS-1。使用密钥的这个字节表示来使用RSA使用SHA-256对数据进行签名。使用Base 64对结果签名进行编码。

并且,他们文档中的java代码也是这样做的:

代码语言:javascript
复制
 public static String signData(String stringToBeSigned, String encodedPrivateKey) {
    String signatureString = null;
    try {
        byte[] encodedKeyBytes = Base64.decodeBase64(encodedPrivateKey);
        PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(encodedKeyBytes);
        KeyFactory kf = KeyFactory.getInstance("RSA");
        PrivateKey myPrivateKey = kf.generatePrivate(privSpec);
        Signature signature = Signature.getInstance("SHA256withRSA");
        signature.initSign(myPrivateKey);
        byte[] data = stringToBeSigned.getBytes("UTF-8");
        signature.update(data);
        byte[] signedBytes = signature.sign();
        signatureString = Base64.encodeBase64String(signedBytes);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return signatureString;
}

供参考,这是类似的东西要求点网。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2017-02-23 21:00:11

我试着用Javascript开发了一个SAML连接器,并找到了几个处理不同密钥文件格式等的库。我做了相当长的工作,但是运行一些脚本的时间令人难以置信(想象一下尝试登录,但是这个过程需要两分钟才能确定您的登录是有效的)

这时,我切换到了一个外部系统,并使用Netsuite的入站SSO管理SSO。

看起来,即使使用SS2.0,密码部门的NS也没有那么大的改进。

我倾向于把它分为两部分。在Suitescript中生成您的文件,并通过一个基于java的web服务来处理签名要求。最小化您必须编写的Java量,并将事务提取/格式化脚本保持在易于控制的范围内。

票数 1
EN

Stack Overflow用户

发布于 2019-06-07 17:00:02

我找到了一个库(jsrsa符号),它将在4秒内从NetSuite服务器端完成沃尔玛的签名!(市场已经转到了OAuth2,但我被困在了作为空投船供应商的签名上)

代码语言:javascript
复制
/**
 *@NApiVersion 2.x
 *@NScriptType ScheduledScript
 */

define(['N/log', 'N/https', '../lib/jsrsasign-master/jsrsasign-all-min'],
    function(log, https) {
        function execute(context) {
            var pkcs8Der = {Your Walmart Private Key};
            var pkcs8Pem = [
                '-----BEGIN PRIVATE KEY-----',
                pkcs8Der.match(/.{0,64}/g).join('\n'),
                '-----END PRIVATE KEY-----'
            ].join('\n');

            var tStamp = Date.now()
            var stringToSign = [
                tStamp,
                {Your Walmart Comsumer Id},
                {Request URL},
                {Request Method (All Caps)}
            ].join('\n') + '\n';

            var sig = new KJUR.crypto.Signature({"alg": "SHA256withRSA"});
            sig.init(pkcs8Pem);
            var sigVal = hextob64(sig.signString(stringToSign));

            log.audit({title: 'Signature', details: sigVal});
            log.audit({title: 'Timestamp', details: tStamp});
        }

        return {
            execute: execute,
        };
    }
);

我必须将以下代码添加到jsrsasign-all-min.js库文件中,以便按计划的脚本加载模块:

代码语言:javascript
复制
var navigator = {}, window = undefined;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42416709

复制
相关文章

相似问题

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