Hoja de cálculo de Google: Cifre el contenido de la celda con Google Apps Script

Tengo una spreadsheet de Google y me gustaría encriptar el contenido de unas pocas celdas (no me importa qué método de encryption se está utilizando, siempre que haya un método de desencryption equivalente para iOS).

Lamentablemente, no hay funciones de encryption integradas en Google Apps Script.

Por esta razón, me gustaría usar una biblioteca Javascript de código abierto como Crypto-JS y sjcl .

¿Cómo puedo usar una de estas bibliotecas con Google Apps Script?

En la documentation de Google Apps Script, no he encontrado ninguna pista sobre cómo usar bibliotecas JavaScript externas con mi Google Apps Script.

Bueno, voy a decir esto, porque este es el método que utilicé con Date JS . Puedes hacer lo siguiente:

  1. Descargue el file .js de origen.
  2. Abra el file .js en un editor de text
  3. Copie / pegue todo el código en un nuevo Script Project
    • aquí puede "recrear" los files .js originales (copyr / pegar fuente individualmente) con los mismos nombres
  4. Incluya la key de proyecto de ese Proyecto de secuencia de commands como una biblioteca del proyecto en el que desea usar esas funciones.

Incluso si los proyectos son de código abierto, querrá asegurarse de cumplir con las licencias de esos proyectos si va a utilizarlos.

Esto es básicamente un pequeño "truco" en torno a la imposibilidad de cargar files .js en proyectos de GAS. Suponiendo que el JS es estándar, este método funcionará con el sistema de Google.


La otra opción es encontrar fácilmente un package criptográfico ligero de una o dos funciones, o un único algorithm criptográfico como AES-128 (que se le ha dado permiso para usar, por supuesto). Realmente depende de la cantidad de encryption que desee, si necesita revertir el text de encryption para get los valores simples, etc.

Si esto es para algún tipo de sistema de passwords, recomendaría usar un hash simple. Por ejemplo:

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 } 

en el que pediría la contraseña de un usuario, y si la contraseña hash coincidiera con el hash almacenado en la spreadsheet o donde sea, entonces debería validar. Puede usar esto para simular el inicio de session en una GUI de UiApp, por ejemplo: almacenar hash de nombres de usuario / passwords en una database y validar a un usuario antes de cargar la aplicación "real".


Sin embargo, como mencionó Serge, las hojas de cálculo contendrán el historial de revisión del valor original antes de que fuera hash, así como el valor después de haber sido hash. Si quiere evitar esto, use ScriptDB.


PD : además de esta solución alternativa, diré que actualmente no es posible "importar" una biblioteca de códigos que no sean GAS en su Proyecto de Guiones, a less que copie manualmente el file de origen por file en su Proyecto de Guiones. Es posible que ya haya una request de funciones en Issue Tracker; si no, puede crear una y yo la protagonizaré.


EDITAR : como request, he incluido un "package" de encryption AES de código abierto (también contiene base64, que es bueno) en la respuesta, para que sirva de reference para otros que quieran encriptar en GAS. Asegúrese de seguir la request del autor, que es retener sus derechos de autor originales y un enlace a la fuente.

Además del AES I linked y el hash simple (equivalente a String.hashCode () de Java), cuyo recurso se puede encontrar aquí , está Crypto-JS como mencionó en su pregunta y, si se tomó el time para copyr completamente / pegue todo el código (suponiendo que esté de acuerdo con los términos de la licencia, no lo he leído), puede usarlo siguiendo los pasos que describí en la mitad superior de mi respuesta.

MD5 en Javascript es también un algorithm que puedes usar. Si usa el código en md5.js que se encuentra en la parte superior de la página, tendrá lo que necesita. Nuevamente, asegúrese de estar siguiendo las reglas de licencia si lo usa.

Personalmente, probablemente solo usaría los patrones hash y base-64 , ya que la mayoría de lo que usaría para este encryption probablemente no sea increíblemente importante. A AES le puede llevar un poco más de time calcular: probablemente pueda compararlo usted mismo para ver si causará problemas mayores con los desencadenantes que se ejecutan durante un período prolongado de time, pero dudo que de todos modos sea un problema.

Nota : base-64 es de 2 vías, también lo es AES. MD5 es un tipo de hash, y la function de hash simple que proporcioné también es (por supuesto) un hash. Las funciones hash son unidireccionales. Entonces, si necesita funcionalidad bidireccional (cifrar / descifrar), utilice base-64 o AES. Base-64 es esencialmente la versión para niños de AES. Y la function de hash simple es la versión para niños de MD5. Mantén esto en mente 🙂

Editar de nuevo : no estoy familiarizado con el desarrollo de iOS o sus componentes internos, pero me parece que iOS puede al less hacer algunas operaciones criptográficas . Sin embargo, es posible que desee leer más acerca de esos methods, porque no estoy muy seguro de cómo se combinan GAS e iOS; No puedo darle más ayuda en esa área, lamentablemente.

Las funciones anteriores no funcionan para mí. Aquí hay algo que puedes copyr y pegar en el editor de guiones de hojas de cálculo (spreadsheet)

 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, eg 123 encoded = encoded+String.fromCharCode(b); } return encoded; } 

Esto es lo que obtienes cuando lo usas = ENC en tu spreadsheet

enter image description here

Basado en este post aquí