我有一个Google电子表格,并希望加密一些单元格的内容(我不关心使用哪种加密方法,只要有相同的iOS解密方法)。
不幸的是,Google Apps脚本中没有内置加密功能。
出于这个原因,我想使用像Crypto-JS和sjcl这样的开源Javascript库。
如何在Google Apps脚本中使用其中一个库?
在Google Apps脚本文档中,我没有找到关于如何在我的Google Apps脚本中使用外部JavaScript库的任何线索。
答案 0 :(得分:7)
我会说这个,因为这是我与Date JS一起使用的方法。您可以执行以下操作:
即使项目是开源的,如果您打算使用这些项目,也需要确保遵守这些项目的许可证。
这基本上是一个小的“黑客”无法将.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时获得的
根据这篇文章here