我有一个谷歌电子表格,想加密几个单元格的内容(我不在乎使用哪种加密方法,只要有适用于 iOS 的等效解密方法)。
不幸的是,Google Apps Script 中没有内置加密功能。
出于这个原因,我想使用像Crypto-JS和sjcl这样的开源 Javascript 库。
如何将这些库之一与 Google Apps 脚本一起使用?
在 Google Apps 脚本文档中,我没有找到任何关于如何将外部 JavaScript 库与我的 Google Apps 脚本一起使用的线索。
好吧,我会这么说,因为这是我在Date JS中使用的方法。您可以执行以下操作:
即使这些项目是开源的,如果要使用它们,您也需要确保遵守这些项目的许可。
这基本上是一个小“黑客”,无法将 .js 文件上传到 GAS 项目中。假设 JS 是标准的,这种方法将适用于谷歌的系统。
另一种选择是简单地找到一个轻量级的单功能或双功能加密包,或者像 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 提到的,电子表格将包含原始值在散列之前的修订历史,以及散列之后的值。如果您想避免这种情况,请使用 ScriptDB。
PS - 除了这个解决方法之外,我会说目前不可能将非 GAS 代码库“导入”到您的脚本项目中,除非您手动将源文件逐个文件复制到您的脚本项目中。问题跟踪器上可能已经有功能请求,如果没有,您可以创建一个,我会给它加星标。
编辑:根据要求,我在答案中包含了一个开源 AES加密“包”(也包含 base64,这很好),作为其他想要在 GAS 中加密的人的参考。确保您遵循作者的要求,即保留他的原始版权并链接回源。
除了我链接的 AES 和简单的哈希(相当于 Java 的 String.hashCode()),其资源可以在这里找到,还有 Crypto-JS 正如你在你的问题中提到的那样,如果你花时间完全复制/粘贴所有代码(假设与许可条款一致 - 我尚未阅读),您可以按照我在答案上半部分中描述的步骤使用它。
Javascript中的 MD5 也是您可以使用的算法。如果您使用位于页面顶部的md5.js中的代码,您将拥有所需的内容。同样,如果您使用它,请确保您遵循许可规则。
就我个人而言,我可能只会使用哈希和base-64模式,因为您使用这种加密的大部分内容可能并不是非常重要。AES 可能需要更长的时间来计算 - 您可能可以自己对其进行基准测试,看看它是否会导致触发器长时间运行时出现重大问题,但我怀疑这无论如何都会是一个问题。
注意:base-64 是 2-way,AES 也是。MD5是一种hash,我提供的简单hash函数也是(当然)hash。哈希函数是单向的。因此,如果您需要双向功能(加密/解密),请使用 base-64 或 AES。Base-64 本质上是 AES 的儿童版本。而简单的哈希函数就是MD5的儿童版。请记住这一点:)
再次编辑:我不熟悉 iOS 开发或其内部结构,但在我看来, iOS 至少可以进行一些加密操作。不过,您可能想进一步了解这些方法,因为我不确定您是如何将 GAS 和 iOS 放在一起的。不幸的是,我无法在这方面为您提供更多帮助。
上面的功能对我不起作用。这是您可以复制并粘贴到谷歌表格(电子表格)脚本编辑器中的内容
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
基于这里的这篇文章