Google电子表格:使用Google Apps脚本加密单元格内容

时间:2013-11-18 17:21:21

标签: javascript google-apps-script google-sheets cryptojs sjcl

我有一个Google电子表格,并希望加密一些单元格的内容(我不关心使用哪种加密方法,只要有相同的iOS解密方法)。

不幸的是,Google Apps脚本中没有内置加密功能。

出于这个原因,我想使用像Crypto-JSsjcl这样的开源Javascript库。

如何在Google Apps脚本中使用其中一个库?

在Google Apps脚本文档中,我没有找到关于如何在我的Google Apps脚本中使用外部JavaScript库的任何线索。

2 个答案:

答案 0 :(得分:7)

我会说这个,因为这是我与Date JS一起使用的方法。您可以执行以下操作:

  1. 下载源.js文件。
  2. 在文本编辑器中打开.js文件
  3. 将所有代码复制/粘贴到新的脚本项目
    • 在这里,您可以“重新创建”原始.js文件(使用相同的名称单独复制/粘贴源)
  4. 将该脚本项目的项目密钥包含在您要使用这些功能的项目的中。
  5. 即使项目是开源的,如果您打算使用这些项目,也需要确保遵守这些项目的许可证。

    这基本上是一个小的“黑客”无法将.js文件上传到GAS项目。假设JS是标准的,这种方法将适用于Google的系统。


    另一个选择是简单地找到一个轻量级的单功能或双功能加密包,或者单个加密算法,如AES-128(当然,你可以使用它)。这真的取决于你想要多少加密,如果你需要反转密文以获得普通值等。

    如果这是某种密码系统,我建议使用简单的哈希。例如:

    function stringHash (someString) {
        var hash = 0;
        if (this.length == 0) return hash;
        for (i = 0; i < this.length; i++) {
            char = this.charCodeAt(i);
            hash = ((hash << 5) - hash) + char;
            hash = hash & hash;
        }
        return Math.abs(hash); // Personally I don't like negative values, so I abs'd it
    }
    

    您要求输入用户的密码,如果密码哈希值与电子表格中存储的哈希值相匹配,那么您将验证。您可以使用它来模拟登录到UiApp GUI,例如:在数据库中存储用户名/密码哈希值,并在加载“真实”应用程序之前验证用户。


    然而,正如Serge所提到的,Spreadsheets将包含散列前的原始值的修订历史记录,以及散列后的值。如果您想避免这种情况,请使用ScriptDB。


    PS - 除了这种解决方法之外,我会说除非您手动复制源代码,否则目前无法将非GAS代码库“导入”您的脚本项目逐个文件到您的脚本项目中。问题跟踪器上可能已有功能请求,如果没有,您可以创建一个,我会为其加注星标。


    编辑:根据请求,我在答案中包含an open source AES加密“包”(包含base64,这很好),作为其他人的参考谁想要在GAS中加密。请务必遵循作者的要求,即保留其原始版权并链接回源。

    除了我链接的AES和简单的哈希(相当于Java的String.hashCode()),其资源可以找到here,你的问题中提到了Crypto-JS,如果你花时间完全复制/粘贴所有代码(假设它同意许可条款 - 我还没有读过它),你可以按照我在答案的上半部分描述的步骤使用它。

    MD5 in Javascript也是您可以使用的算法。如果您使用位于页面顶部的 md5.js 中的代码,您将拥有所需的内容。同样,如果您使用它,请确保遵循许可规则。

    就我个人而言,我可能只会使用 hash base-64 模式,因为您使用此加密的大部分内容可能并不是非常重要。 AES可能需要更长的时间来计算 - 您可以自己对其进行基准测试,以确定它是否会导致触发器长时间运行时出现重大问题,但我怀疑它无论如何都会成为问题。

    注意:base-64是2路,AES也是。 MD5是一种散列,我提供的简单散列函数(当然)也是散列。散列函数是单向的。因此,如果您需要双向功能(加密/解密),则使用base-64或AES。 Base-64基本上是AES的儿童版本。简单的哈希函数是MD5的孩子版本。记住这一点:)

    再次编辑:我不熟悉iOS开发或其内部,但似乎对我来说iOS can at least do some cryptographic operations。你可能想要阅读更多这些方法,因为我不确定你是如何将GAS和iOS放在一起的;不幸的是,我无法在这方面给你任何帮助。

答案 1 :(得分:0)

上述功能对我不起作用。以下是您可以复制并粘贴到Google工作表(电子表格)脚本编辑器

的内容
function enc(str) {
    var encoded = "";
    for (i=0; i<str.length;i++) {
        var a = str.charCodeAt(i);
        var b = a ^ 123;    // bitwise XOR with any number, e.g. 123
        encoded = encoded+String.fromCharCode(b);
    }
    return encoded;
}

这是您在电子表格中使用它= ENC时获得的

enter image description here

根据这篇文章here