簡體   English   中英

Google 電子表格:使用 Google Apps 腳本加密單元格內容

[英]Google Spreadsheet: Encrypt cell content with Google Apps Script

我有一個谷歌電子表格,想加密幾個單元格的內容(我不在乎使用哪種加密方法,只要有適用於 iOS 的等效解密方法)。

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

出於這個原因,我想使用像Crypto-JSsjcl這樣的開源 Javascript 庫。

如何將這些庫之一與 Google Apps 腳本一起使用?

在 Google Apps 腳本文檔中,我沒有找到任何關於如何將外部 JavaScript 庫與我的 Google Apps 腳本一起使用的線索。

好吧,我會這么說,因為這是我在Date JS中使用的方法。 您可以執行以下操作:

  1. 下載源 .js 文件。
  2. 在文本編輯器中打開 .js 文件
  3. 將所有代碼復制/粘貼到新的腳本項目
    • 在這里,您可以“重新創建”具有相同名稱的原始 .js 文件(單獨復制/粘貼源)
  4. 將該腳本項目的項目密鑰包含為您要在其中使用這些功能的項目的

即使這些項目是開源的,如果要使用它們,您也需要確保遵守這些項目的許可。

這基本上是一個小“黑客”,無法將 .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

在此處輸入圖像描述

基於這里的這篇文章

可以通過使用 JavaScript 的內置 eval() 函數(例如eval(UrlFetchApp.fetch('path/to/library')) )來使用外部庫。

當然,該庫必須沒有依賴項才能使其正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM