我有一个谷歌电子表格,并希望加密几个单元格的内容(我不关心使用哪种加密方法,只要有一个等效的iOS解密方法).
遗憾的是,Google Apps脚本中没有内置加密功能.
出于这个原因,我想使用像Crypto-JS和sjcl这样的开源Javascript库.
如何在Google Apps脚本中使用其中一个库?
在Google Apps脚本文档中,我没有找到任何关于如何在我的Google Apps脚本中使用外部JavaScript库的线索.
解决方法:
好吧,我会说这个,因为这是我和Date JS一起使用的方法.您可以执行以下操作:
>下载源.js文件.
>在文本编辑器中打开.js文件
>将所有代码复制/粘贴到新的脚本项目中
>在这里,您可以使用相同的名称“重新创建”原始.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是双向的,AES也是. MD5是一种散列,我提供的简单散列函数(当然)也是散列.散列函数是单向的.因此,如果您需要双向功能(加密/解密),则使用base-64或AES. Base-64基本上是AES的儿童版本.简单的哈希函数是MD5的孩子版本.记住这一点:)
再次编辑:我不熟悉iOS开发或其内部,但在我看来,iOS can at least do some cryptographic operations.你可能想要阅读更多这些方法,因为我不确定你是如何把GAS和iOS放在一起的;不幸的是,我无法在这方面给你任何帮助.