Pergunta

Tenho uma planilha do Google e gostaria de criptografar o conteúdo de algumas células (não me importa qual método de criptografia está sendo usado, desde que haja um método de descriptografia equivalente para iOS).

Infelizmente, não há funções de criptografia integradas no Google Apps Script.

Por esta razão eu gostaria de usar uma biblioteca Javascript de código aberto como Cripto-JS e sjcl.

Como posso usar uma dessas bibliotecas com o Google Apps Script?

Na documentação do Google Apps Script, não encontrei nenhuma pista sobre como usar bibliotecas JavaScript externas com meu Google Apps Script.

Foi útil?

Solução

Bem, vou dizer isso, porque esse é o método que usei com DataJS.Você pode fazer o seguinte:

  1. Baixe o(s) arquivo(s) .js de origem.
  2. Abra o(s) arquivo(s) .js em um editor de texto
  3. Copie/cole todo o código em um novo Projeto de roteiro
    • aqui você pode "recriar" os arquivos .js originais (copiar/colar a fonte individualmente) com os mesmos nomes
  4. Incluir o chave do projeto desse Projeto de Script como um biblioteca do projeto no qual você deseja usar essas funções.

Mesmo que os projetos sejam de código aberto, você vai querer ter certeza de cumprir as licenças desses projetos se for usá-los.

Este é basicamente um pequeno "hack" para não ser possível fazer upload de arquivos .js em projetos GAS.Supondo que o JS seja padrão, este método funcionará com o sistema do Google.


A outra opção é simplesmente encontrar um pacote criptográfico leve de uma ou duas funções, ou um único algoritmo criptográfico como AES-128 (que você tem permissão para usar, é claro).Realmente depende de quanta criptografia você deseja, se você precisa reverter o texto cifrado para obter os valores simples, etc.

Se for algum tipo de sistema de senha, eu recomendaria usar um hash simples.Por exemplo:

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
}

no qual você solicitaria a senha de um usuário e se o hash da senha correspondesse ao hash armazenado na planilha ou em qualquer outro lugar, você validaria.Você pode usar isso para simular o login em uma GUI UiApp, por exemplo:armazene hashes de nomes de usuário/senha em um banco de dados e valide um usuário antes de carregar o aplicativo "real".


No entanto, como Serge mencionou, as planilhas conterão o histórico de revisão do valor original antes do hash, bem como o valor depois do hash.Se você quiser evitar isso, use ScriptDB.


PS - além dessa solução alternativa, direi que atualmente não é possível "importar" uma biblioteca de código não-GAS para o seu projeto de script, a menos que você copie manualmente a fonte, arquivo por arquivo, para o seu projeto de script.Pode já haver uma solicitação de recurso no Issue Tracker; caso contrário, você pode criar uma e eu a marcarei com uma estrela.


EDITAR:Conforme solicitação, incluí um AES de código aberto "pacote" de criptografia (contém base64 também, o que é legal) na resposta, para servir de referência para outros que desejam criptografar no GAS.Certifique-se de seguir a solicitação do autor, que é manter seus direitos autorais originais e vincular de volta à fonte.

Além do AES que vinculei e do hash simples (equivalente ao String.hashCode() do Java), cujo recurso pode ser encontrado aqui, existe o Crypto-JS como você mencionou na sua pergunta e, se você reservou um tempo para copiar/colar totalmente todo o código (supondo que ele concorde com os termos da licença - eu não li), você poderia usar isso pelas etapas que descrevi na metade superior da minha resposta.

MD5 em Javascript também é um algoritmo que você pode usar.Se você usar o código em md5.js que está localizado no topo da página, você terá o que precisa.Novamente, certifique-se de seguir as regras de licenciamento ao usá-lo.

Pessoalmente, eu provavelmente usaria apenas o cerquilha e a base-64 padrões, já que a maior parte das finalidades para as quais você usaria essa criptografia provavelmente não é extremamente importante.O AES pode demorar um pouco mais para ser computado - você provavelmente pode compará-lo sozinho para ver se causará grandes problemas com gatilhos em execução por um longo período de tempo, mas duvido que seja um problema de qualquer maneira.

Observação:base-64 é bidirecional, assim como AES.MD5 é um tipo de hash, e a função hash simples que forneci também é (é claro) um hash.As funções hash são unilaterais.Portanto, se você precisar de funcionalidade bidirecional (criptografar/descriptografar), use base 64 ou AES.Base-64 é essencialmente a versão infantil do AES.E a função hash simples é a versão infantil do MD5.Mantenha isso em mente :)

Edite novamente:Não estou familiarizado com o desenvolvimento do iOS ou com seus componentes internos, mas parece para mim isso iOS pode pelo menos fazer algumas operações criptográficas.Você pode querer ler mais sobre esses métodos, porque não tenho certeza de como você está juntando o GAS e o iOS;Não posso lhe dar mais ajuda nessa área, infelizmente.

Outras dicas

As funções acima não funcionam para mim.Aqui está algo que você pode copiar e colar no editor de scripts do Google Sheets (planilha).

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

Isto é o que você obtém quando usa =ENC em sua planilha

enter image description here

Baseado nesta postagem aqui

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top