65 votes

Hachage d'un texte de cellule dans la feuille de calcul Google

Comment puis-je calculer un hachage de texte MD5 ou SHA1 dans une cellule spécifique et le définir sur une autre cellule dans la feuille de calcul Google ?

Existe-t-il une formule comme =ComputeMD5(A1) ou =ComputeSHA1(A1) ?

Ou est-il possible d'écrire une formule personnalisée pour cela? Comment?

123voto

gabhubert Points 1081

Ouvrez Tools > Script Editor puis collez le code suivant :

 function MD5 (input) {
  var rawHash = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, input);
  var txtHash = '';
  for (i = 0; i < rawHash.length; i++) {
    var hashVal = rawHash[i];
    if (hashVal < 0) {
      hashVal += 256;
    }
    if (hashVal.toString(16).length == 1) {
      txtHash += '0';
    }
    txtHash += hashVal.toString(16);
  }
  return txtHash;
}

Enregistrez le script après cela, puis utilisez la fonction MD5() dans votre feuille de calcul tout en référençant une cellule.

Ce script est basé sur la fonction Utilities.computeDigest() .

22voto

Sean Thompson Points 261

Merci à gabhubert pour le code.

Ceci est la version SHA1 de ce code (changement très simple)

 function GetSHA1(input) {
  var rawHash = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_1, input);
  var txtHash = '';
  for (j = 0; j <rawHash.length; j++) {
    var hashVal = rawHash[j];
    if (hashVal < 0)
      hashVal += 256; 
    if (hashVal.toString(16).length == 1)
     txtHash += "0";
    txtHash += hashVal.toString(16);
    }
  return txtHash;
}

4voto

Accipheran Points 1283

La différence entre cette solution et les autres est :

1) Cela résout un problème rencontré par certaines des solutions ci-dessus avec le décalage de la sortie de Utilities.computeDigest (il compense de 128 au lieu de 256)

2) Il résout un problème qui fait que d'autres solutions produisent le même hachage pour différentes entrées en appelant JSON.stringify() sur input avant de le passer à Utilities.computeDigest()

 function MD5(input) {
  var result = "";
  var byteArray = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, JSON.stringify(input));
  for (i=0; i < byteArray.length; i++) {
    result += (byteArray[i] + 128).toString(16) + "-";
  }
  result = result.substring(result, result.length - 1); // remove trailing dash
  return result;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X