如何在 SuiteScript 2.0 中 encrypt/decrypt 一个字符串?

How to encrypt/decrypt a string in SuiteScript 2.0?

在 SuiteScript 1.0 中,我们可以对 encrypt/decrypt 字符串使用 nlapiEncrypt/nlapiDecrypt api 函数。但是,根据 2.0 api 文档,SuiteScript 2.0 中没有直接翻译这两个 api 函数。该文档还指向 crypto 模块(主要是关于创建 cipher/decipher 对象),但我真的不明白这个模块如何完成任务。任何人都可以阐明这个功能吗?谢谢!

  1. 加密模块提供 AES Encryption/Decryption。加密:

    1. 通过使用 SecretKeyField 创建 Suitelet 来获取 GUID。后 输入您的密钥并提交表单,Suitelet 将 return 一个 GUID。您还需要此 GUID 进行解密。

    2. 使用GUID制作secretKey

    3. 使用secretKey创建一个Cypher

    4. 用您要加密的数据更新 Cypher。

    5. 完成Cypher以提取加密文本和iv.

  2. 加密模块提供以下散列算法:

    • SHA1
    • SHA256
    • SHA512
    • MD5

      您可以使用(仅限 HMAC)或不使用密钥进行散列。

  3. 编码模块提供以下编码:

    • UTF_8
    • BASE_16
    • BASE_32
    • BASE_64
    • BASE_64_URL_SAFE
    • 十六进制

      您必须指定您来自和去往的编码

或者,您可以使用 Library 更简单地完成相同的事情。

我不想使用 NetSuite 的解密功能,因为它使用了一个必须使用 addSecretKeyField 生成的 guid 字段。此外,它们还需要另一个密钥和一个初始化向量。

我不明白他们的密钥与普通密钥的用途是什么,不想被迫使用 guid/IV。

根据 Nathan Sutherland 在他的回答中的建议,我发现库 crypto-js 可与 netsuite(甚至服务器端)一起使用。

如何:

  • 下载crypto-js v3.1.9-1(显然以后的版本与NetSuite不兼容)
  • 将文件 crypto-js.js 放在 SuiteScripts 文件夹下的某处。
    • 我选择了一个名为 lib
    • 的文件夹

示例 v2 NetSuite 代码

define(['./lib/crypto-js.js', 'N/log'],
function (crypto, log) {
  // ...
  var encrypted = crypto.AES.encrypt('Message', 'My Passphrase').toString();
  var decrypted = crypto.AES.decrypt(encrypted, 'My Passphrase').toString(crypto.enc.Utf8);
  log.debug('encrypted', encrypted);
  log.debug('decrypted', decrypted);
  // ...
});