Pregunta

Tengo una hoja de cálculo de Google y me gustaría cifrar el contenido de algunas celdas (no me importa qué método de cifrado se utilice siempre que exista un método de descifrado equivalente para iOS).

Lamentablemente, Google Apps Script no tiene funciones de cifrado integradas.

Por este motivo me gustaría utilizar una biblioteca Javascript de código abierto como Cripto-JS y sjcl.

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

En la documentación de Google Apps Script, no encontré ninguna pista sobre cómo usar bibliotecas de JavaScript externas con mi Google Apps Script.

¿Fue útil?

Solución

Bueno, diré esto, porque este es el método que usé con Fecha JS.Puedes hacer lo siguiente:

  1. Descargue los archivos .js de origen.
  2. Abra los archivos .js en un editor de texto
  3. Copie/pegue todo el código en un nuevo Proyecto de guión
    • aquí puede "recrear" los archivos .js originales (copiar/pegar la fuente individualmente) con los mismos nombres
  4. Incluir la clave del proyecto de ese proyecto de guión como biblioteca del proyecto en el que desea utilizar esas funciones.

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

Esto es básicamente un pequeño "truco" para no poder cargar archivos .js en Proyectos GAS.Suponiendo que JS sea estándar, este método funcionará con el sistema de Google.


La otra opción es simplemente encontrar un paquete criptográfico liviano de una o dos funciones, o un algoritmo criptográfico único como AES-128 (que, por supuesto, tiene permiso para usarlo).Realmente depende de cuánto cifrado desee, si necesita invertir el texto cifrado para obtener los valores simples, etc.

Si se trata de algún tipo de sistema de contraseñas, 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 solicitaría la contraseña de un usuario, y si el hash de la contraseña coincidiera con el hash almacenado en la hoja de cálculo o en cualquier otro lugar, entonces validaría.Puede usar esto para simular el inicio de sesión en una GUI de UiApp, por ejemplo:almacene hashes de nombres de usuario/contraseñas en una base de datos y valide un usuario antes de cargar la aplicación "real".


Sin embargo, como mencionó Serge, las hojas de cálculo contendrán el historial de revisiones del valor original antes de que se aplicara el hash, así como el valor después de que se aplicara el hash.Si quiere evitar esto, utilice ScriptDB.


PD - Además de esta solución alternativa, diré que actualmente no es posible "importar" una biblioteca de códigos que no sea GAS a su proyecto de secuencia de comandos, a menos que copie manualmente el archivo fuente archivo por archivo en su proyecto de secuencia de comandos.Es posible que ya haya una solicitud de función en el Rastreador de problemas; de lo contrario, puede crear una y la destacaré.


EDITAR:Según solicitud, he incluido un AES de código abierto "paquete" de cifrado (también contiene base64, lo cual es bueno) en la respuesta, para actuar como referencia para otros que quieran cifrar en GAS.Asegúrese de seguir la solicitud del autor, que es conservar sus derechos de autor originales y vincular a la fuente.

Aparte del AES que vinculé y el hash simple (equivalente al String.hashCode() de Java), cuyo recurso se puede encontrar aquí, existe Crypto-JS como mencionaste en tu pregunta y, si te tomaste el tiempo de copiar y pegar completamente todo el código (suponiendo que esté de acuerdo con los términos de la licencia; no lo he leído), podrías usarlo. siguiendo los pasos que describí en la mitad superior de mi respuesta.

MD5 en JavaScript También es un algoritmo que podrías usar.Si usas el código en md5.js que se encuentra en la parte superior de la página, tendrás lo que necesitas.Nuevamente, asegúrese de seguir las reglas de licencia si lo usa.

Personalmente probablemente solo usaría el picadillo y el base-64 patrones, ya que la mayor parte del uso de este cifrado probablemente no sea increíblemente importante.Es posible que AES tarde un poco más en calcularse; probablemente pueda compararlo usted mismo para ver si causará problemas importantes con los activadores que se ejecutan durante un período de tiempo prolongado, pero dudo que sea un problema de todos modos.

Nota:base-64 es bidireccional, al igual que AES.MD5 es un tipo de hash, y la función hash simple que proporcioné también es (por supuesto) un hash.Las funciones hash son unidireccionales.Entonces, si necesita una funcionalidad bidireccional (cifrar/descifrar), utilice base-64 o AES.Base-64 es esencialmente la versión infantil de AES.Y la función hash simple es la versión infantil de MD5.Mantén esto en mente :)

Editar de nuevo:No estoy familiarizado con el desarrollo de iOS ni con sus componentes internos, pero parece para mí eso iOS puede al menos realizar algunas operaciones criptográficas.Quizás quieras leer más sobre esos métodos, porque no estoy muy seguro de cómo estás juntando GAS e iOS;Desafortunadamente no puedo brindarle más ayuda en esa área.

Otros consejos

Las funciones anteriores no funcionan para mí.Aquí hay algo en lo que puede copiar y pegar en las hojas de Google (hoja de cálculo) Editor de script

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;
}

Esto es lo que obtiene cuando lo usa= ENC en su hoja de cálculo

 ingrese la descripción de la imagen aquí

Basado en esta publicación aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top