4

У меня есть электронная таблица Google и вы хотите зашифровать содержимое нескольких ячеек (мне все равно, какой метод шифрования используется, если существует эквивалентный метод расшифровки для IOS).Google Spreadsheet: Шифрование содержимого ячеек с помощью скрипта Google Apps

К сожалению, в скрипте Google Apps нет встроенных функций шифрования.

По этой причине я хотел бы использовать библиотеку с открытым исходным кодом, такую ​​как Crypto-JS и sjcl.

Как я могу использовать одну из этих библиотек с помощью Google Apps Script?

В документации по скрипту Google Apps я не нашел ни малейшего понятия о том, как использовать внешние библиотеки JavaScript с моим скриптом Google Apps.

+1

Использование шифрования в электронной таблице Google, возможно, не очень хорошая идея из-за сборки в истории ревизий, которая позволит любому пользователю увидеть док-станцию ​​до шифрования ... как вы могли бы подумать обойти эту проблему? –

+0

@Serge insas Я буду хранить зашифрованное и оригинальное значение в той же таблице. Сценарий будет загружать только зашифрованное значение на сервер с использованием протокола REST. Таблицу, включающую исходное значение, никто не увидит. – AlexR

+0

нормально, хорошо знать ;-) Как вы напишете свое приложение-приложение? ГАЗ тоже? мой вопрос: вы не могли бы зашифровать его в приложении, а не в SS? (только вопрос) –

ответ

6

Хорошо, я скажу это, потому что это метод, который я использовал с Date JS. Вы можете сделать следующее:

  1. Загрузить исходный .js-файл (ы).
  2. Откройте .js файл (ы) в текстовом редакторе
  3. Копировать/вставить весь код в новый Project Script
    • здесь вы можете «воссоздать» оригинальные .js файлы (копия/источник пасты индивидуально) с теми же именами
  4. Включите проект ключа этого проект сценария как библиотеки проекта, в котором вы хотите использовать эти функции.

Даже если проекты с открытым исходным кодом, вы захотите убедиться, что выполняете лицензии этих проектов, если собираетесь их использовать.

Это, по сути, небольшой «взлом» вокруг того, что вы не можете загружать файлы .js в проекты GAS. Предполагая, что JS является стандартным, этот метод будет работать с системой Google.


Другой вариант заключается в простой найти легкий вес одного или двух функций криптографических пакет, или единый алгоритм шифрования, как AES-128 (TAHT вам дается разрешение на использование, конечно). Это действительно зависит от того, сколько шифрования вы хотите, если вам нужно изменить текст шифрования, чтобы получить простые значения и т. Д.

Если это какая-то система паролей, я бы рекомендовал использовать простой хэш. Например:

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 
} 

, в котором вы бы запрашивать пароль пользователя, и если хэш пароля соответствует хэш хранящуюся в таблице или где, то вы бы проверить. Вы можете использовать это для имитации входа в GUI UiApp, например: хранить имена пользователей/паролей в базе данных и проверять пользователя перед загрузкой «реального» приложения.


Однако, как уже упоминалось Serge, электронные таблицы будут содержать историю изменения первоначальной стоимости, прежде чем он был хэшируется, а также значение после того, как он был хэшируется. Если вы хотите этого избежать, используйте ScriptDB.


PS - в дополнение к этой работе многоборье, я скажу, что это не возможно в настоящее время на «импорт» не-GAS код библиотеки в проект сценария, если вы вручную скопировать исходный файл -by-file в ваш проект сценария. Возможно, уже есть запрос функции на Tracker Issue, если вы не можете создать его, и я буду его запускать.


EDIT: По желанию, я включил an open source AES шифрования «пакет» (содержит base64, а также, что приятно) в ответ, чтобы действовать в качестве эталона для других людей, которые хотят, чтобы зашифровать в ГАЗ. Убедитесь, что вы следуете просьбе автора, которая заключается в сохранении его первоначального авторского права и ссылки на источник.

За исключением AES I и простого хеша (эквивалент String.hashCode() Java), ресурс которого можно найти here, есть крипто-JS, как вы упомянули в своем вопросе, и, если вы нашли время полностью копировать/вставлять весь код (при условии, что это согласуется с условиями лицензии - я его не читал), вы можете использовать это по шагам, которые я описал в первой половине моего ответа.

MD5 in Javascript также является алгоритмом, который вы можете использовать. Если вы используете код в md5.js, который находится в верхней части страницы, у вас будет все, что вам нужно. Опять же, убедитесь, что вы используете правила лицензирования, если используете его.

Лично я бы, вероятно, просто использовать хэш и базы-64 модели, так как большинство из того, что вы будете использовать это шифрование, вероятно, не невероятно важно. AES может потребоваться немного больше времени, чтобы вычислить - вы, вероятно, можете сравнить его самостоятельно, чтобы увидеть, вызовет ли он серьезные проблемы с запуском триггеров в течение длительного периода времени, но я сомневаюсь, что это будет проблемой в любом случае.

Примечание: base-64 является 2-way, также AES. MD5 - это тип хэша, и простая хэш-функция, которую я предоставил, также (конечно) хеш. Хэш-функции однонаправлены. Поэтому, если вам нужны двухсторонние функции (шифрование/дешифрование), используйте base-64 или AES. Base-64 - это, по сути, малая версия AES. И простая хэш-функция - это малая версия MD5. Имейте это в виду :)

Edit снова: Я не знаком с развитием IOS или его внутренностей, но кажется мне, что iOS can at least do some cryptographic operations. Возможно, вы захотите больше прочитать эти методы, потому что я не совсем уверен, как вы объединяете GAS и iOS; К сожалению, я не могу вам помочь.

+0

Благодарим вас за подробный ответ! Есть ли источник простого легкого кода, который вы бы порекомендовали? Мне просто нужно «некоторое» шифрование, ничего необычного. – AlexR

+0

Я сделал существенное дополнение к моему первоначальному ответу, см. Раздел ** edit ** внизу. Надеюсь, это поможет :) О, и если один из этих методов, похоже, соответствует вашим потребностям, обязательно сделайте это как ответ;) –

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 в таблице

enter image description here

Исходя из этого post here

Смежные вопросы