Таблица Google: зашифруйте содержимое ячейки с помощью скрипта Google Apps
У меня есть таблица Google и я хочу зашифровать содержимое нескольких ячеек (мне все равно, какой метод шифрования используется, если для iOS существует эквивалентный метод дешифрования).
К сожалению, в скрипте Google Apps нет встроенных функций шифрования.
По этой причине я хотел бы использовать библиотеку Javascript с открытым исходным кодом, такую как Crypto-JS и sjcl.
Как я могу использовать одну из этих библиотек со скриптом Google Apps?
В документации по скрипту Google Apps я не нашел никаких подсказок о том, как использовать внешние библиотеки JavaScript с моим скриптом Google Apps.
3 ответа
Хорошо, я скажу это, потому что это метод, который я использовал с Date JS. Вы можете сделать следующее:
- Загрузите исходный файл.js.
- Откройте файл.js в текстовом редакторе.
- Скопируйте / вставьте весь код в новый скрипт-проект
- здесь вы можете "воссоздать" исходные файлы.js (индивидуально скопировать / вставить источник) с теми же именами
- Включите ключ проекта этого Script Project в качестве библиотеки проекта, в котором вы хотите использовать эти функции.
Даже если проекты с открытым исходным кодом, вы должны убедиться, что вы соответствуете лицензиям этих проектов, если вы собираетесь их использовать.
По сути, это небольшой "хак" из-за невозможности загружать файлы.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, например: хранить имена пользователей / хэши паролей в базе данных и проверять пользователя перед загрузкой "реального" приложения.
Однако, как упомянул Серж, электронные таблицы будут содержать историю изменений исходного значения до его хеширования, а также значение после того, как оно было хешировано. Если вы хотите избежать этого, используйте ScriptDB.
PS - в дополнение к этому обходному пути я скажу, что в настоящее время невозможно "импортировать" библиотеку кода, не относящуюся к GAS, в ваш проект сценариев, если только вы вручную не копируете исходный файл за файлом в проект сценариев. Возможно, уже есть запрос на функцию отслеживания ошибок, если нет, то вы можете создать его, и я буду отмечать его.
РЕДАКТИРОВАТЬ: В соответствии с запросом, я включил в ответ "пакет" шифрования AES с открытым исходным кодом (также содержит base64, что неплохо), чтобы он служил ссылкой для тех, кто хочет шифровать в GAS. Обязательно следуйте запросу автора, который заключается в сохранении его оригинального авторского права и ссылки на источник.
Помимо связанного с AES I и простого хэша (эквивалентного Java String.hashCode()), ресурс которого можно найти здесь, есть Crypto-JS, как вы упомянули в своем вопросе, и, если вы нашли время, чтобы полностью скопировать / вставьте весь код (при условии, что это согласуется с условиями лицензии - я ее не читал), вы можете использовать это в соответствии с шагами, которые я описал в верхней части моего ответа.
MD5 в Javascript - это также алгоритм, который вы можете использовать. Если вы используете код в md5.js, который находится в верхней части страницы, у вас будет то, что вам нужно. Опять же, убедитесь, что вы следуете правилам лицензирования, если используете его.
Лично я, вероятно, просто использовал бы хэш и шаблоны base-64, так как большая часть того, для чего вы будете использовать это шифрование, вероятно, не невероятно важна. AES может занять немного больше времени для вычислений - вы, вероятно, можете сравнить его самостоятельно, чтобы увидеть, не вызовет ли это серьезные проблемы с триггерами, работающими в течение длительного периода времени, но я сомневаюсь, что это все равно будет проблемой.
Примечание: base-64 - 2-полосная, как и AES. MD5 - это тип хэша, и предоставленная мною простая хеш-функция также (конечно) хэш. Хеш-функции являются односторонними. Поэтому, если вам нужна двусторонняя функциональность (шифрование / дешифрование), используйте base-64 или AES. Base-64 по сути является детской версией AES. А простая хеш-функция - это детская версия MD5. Имейте это в виду:)
Отредактируйте еще раз: я не знаком с разработкой iOS или ее внутренними компонентами, но мне кажется, что iOS может по крайней мере выполнять некоторые криптографические операции. Возможно, вы захотите узнать больше об этих методах, потому что я не совсем уверен, как вы объединяете GAS и iOS; Я не могу вам больше помочь в этой области, к сожалению.
Функции выше не работают для меня. Вот кое-что, что вы можете скопировать и вставить в редактор сценариев 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 в своей таблице
На основании этого поста здесь
Внешние библиотеки можно использовать с помощью встроенной в JavaScript функции eval() (например,
eval(UrlFetchApp.fetch('path/to/library'))
).
Конечно, библиотека не должна иметь никаких зависимостей, чтобы это работало.