草庐IT

javascript - 谷歌电子表格 : Encrypt cell content with Google Apps Script

coder 2025-03-17 原文

我有一个谷歌电子表格,想加密几个单元格的内容(只要有适用于 iOS 的等效解密方法,我不在乎使用哪种加密方法)。

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

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

如何将这些库之一与 Google Apps Script 结合使用?

在 Google Apps Script 文档中,我没有找到任何关于如何在我的 Google Apps Script 中使用外部 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 它位于页面顶部,您将拥有所需的东西。同样,如果您使用它,请确保您遵循许可规则。

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

    备注 :base-64 是 2 路,AES 也是。 MD5是hash的一种,我提供的简单hash函数也是(当然)hash。哈希函数是单向的。因此,如果您需要双向功能(加密/解密),请使用 base-64 或 AES。 Base-64 本质上是 AES 的 child 版本。而简单的hash函数就是MD5的kid版。记住这一点:)

    再次编辑 :我不熟悉 iOS 开发或其内部结构,但在我看来 iOS can at least do some cryptographic operations .不过,您可能想更多地了解这些方法,因为我不确定您是如何将 GAS 和 iOS 结合在一起的;不幸的是,我无法在该领域为您提供更多帮助。

    关于javascript - 谷歌电子表格 : Encrypt cell content with Google Apps Script,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20053819/

    有关javascript - 谷歌电子表格 : Encrypt cell content with Google Apps Script的更多相关文章

    1. ruby-on-rails - Prawn - 表格单元格内的链接 - 2

      我正在尝试用Prawn生成PDF。在我的PDF模板中,我有带单元格的表格。在其中一个单元格中,我有一个电子邮件地址:cell_email=pdf.make_cell(:content=>booking.user_email,:border_width=>0)我想让电子邮件链接到“mailto”链接。我知道我可以这样链接:pdf.formatted_text([{:text=>booking.user_email,:link=>"mailto:#{booking.user_email}"}])但是将这两行组合起来(将格式化文本作为内容)不起作用:cell_email=pdf.make_c

    2. ruby - 如何使用 Ruby 将 CSV 文件读入 HTML 表格? - 2

      我正在尝试将一个简单的CSV文件读入HTML表格以在浏览器中显示,但我遇到了麻烦。这就是我正在尝试的:Controller:defshow@csv=CSV.open("file.csv",:headers=>true)end查看:输出:NameStartDateEndDateQuantityPostalCode基本上我只获取标题,而不会读取和呈现CSV正文。 最佳答案 这最终成为最终解决方案:Controller:defshow#OpenaCSVfile,andthenreaditintoaCSV::Tableobjectforda

    3. ruby - 如何使用 Nokogiri 解析纯 HTML 表格? - 2

      我想用Nokogiri解析HTML页面。页面的一部分有一个表,它没有使用任何特定的ID。是否可以提取如下内容:Today,3,455,34Today,1,1300,3664Today,10,100000,3444,Yesterday,3454,5656,3Yesterday,3545,1000,10Yesterday,3411,36223,15来自这个HTML:TodayYesterdayQntySizeLengthLengthSizeQnty345534345456563113003664354510001010100000344434113622315

    4. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

      我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

    5. ruby-on-rails - prawnto 显示新页面时不会中断的表格 - 2

      我有可变数量的表格和可变数量的行,我想让它们一个接一个地显示,但如果表格不适合当前页面,请将其放在下一页,然后继续。我已将表格放入事务中,以便我可以回滚然后打印它(如果高度适合当前页面),但我如何获得表格高度?我现在有这段代码pdf.transactiondopdf.table@data,:font_size=>12,:border_style=>:grid,:horizontal_padding=>10,:vertical_padding=>3,:border_width=>2,:position=>:left,:row_colors=>["FFFFFF","DDDDDD"]pdf.

    6. ruby-on-rails - 验证电子邮件地址是 Paypal 用户 - 2

      我想验证一个电子邮件地址是否是PayPal用户。是否有API调用来执行此操作?是否有执行此操作的ruby​​库?谢谢 最佳答案 GetVerifiedStatus来自PayPal'sAdaptiveAccounts平台会为您做这件事。PayPal没有任何codesamples或SDKs用于Ruby中的自适应帐户,但我确实找到了编写codeforGetVerifiedStatusinRuby的人.您需要更改该代码以检查他们拥有的帐户类型的唯一更改是更改if@xml['accountStatus']!=nilaccount_status

    7. ruby-on-rails - 使用 gmaps4rails 动态加载谷歌地图标记 - 2

      如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail

    8. ruby-on-rails - Ruby on Rails - 需要在每周的特定时间将消息发送到电子邮件 - 2

      我想知道我应该如何着手这个项目。我需要每周向人们发送一次电子邮件。但是,这必须在每周的特定时间自动生成并发送。编码有多难?我需要知道是否有任何书籍可以提供帮助,或者你们中的任何人是否可以指导我。它必须使用ruby​​onrails进行编程。因此有一个网络服务和数据库集成。干杯 最佳答案 为什么这么复杂?您只需安排工作。您可以使用Delayed::Job例如。Delayed::Job让您可以使用run_at符号在特定时间安排作业,如下所示:Delayed::Job.enqueue(SendEmailJob.new(...),:run_

    9. ruby - 如何以表格格式快速打印 Ruby 哈希值? - 2

      有没有办法快速将表格格式的ruby​​哈希打印到文件中?如:keyAkeyBkeyC...1232343451253474456...其中散列的值是不同大小的数组。还是使用双循环是唯一的方法?谢谢 最佳答案 试试我写的这个gem(在表中打印散列、ruby对象、ActiveRecord对象):http://github.com/arches/table_print 关于ruby-如何以表格格式快速打印Ruby哈希值?,我们在StackOverflow上找到一个类似的问题:

    10. ruby - 在 Mechanize 中使用 JavaScript 单击链接 - 2

      我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan

    随机推荐