wolf47
@wolf47
Айтишник, немного програмирую на JS

Как сгенерить md5 строку на Google Script?

Мне необходимо инструментами Google Script собрать строку путем конкатенирования параметров с добавлением в конце секретного ключа md5, sha1 или sha256.

Делаю следующее:
var md5String = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, name+'3350'+service+bookitem+id+date+'byc2iycvbdn1fvbtghxqm9');

А получаю следующий результат:
Logger.log(md5String ) // -51, -106, 88, -121, -103, 78, -8, -65, 76, -51, 124, -91, -76, -60, 99, -118

Почему так происходит?

По идее я должен был получить строку подобно этому gf32h03j927t3rgb2rcgxhwx207fcw

а вместо этого получаю массив числами.

Делаю свой хэш с помощью сервиса (www.md5.cz ) работает, а через инструменты Google не работает.

Подскажите плиз
  • Вопрос задан
  • 4218 просмотров
Решения вопроса 1
oshliaer
@oshliaer Куратор тега Google Apps Script
Google Products Expert
Здравствуйте.

Мне кажется, что у вас неполные представления о методах Google Apps Script, алгоритмах хэширования и системах исчисления.

Во-первых, computeDigest возвращает массив Byte[], что он и должен делать.
Во-вторых, вам просто его надо "преобразовать в 16-ричную хэш строку", как сказано выше.

Попробуйте сделать так:

function test(){
  Logger.log(toMD5('56'));
}
const toMD5 = function(charset, toByte) {
  charset = charset || Utilities.Charset.UTF_8;
  var digest = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, this, charset);
  if(toByte) return digest;
  var __ = '';
  for (i = 0; i < digest.length; i++) {
    var byte = digest[i];
    if (byte < 0) byte += 256;
    var bStr = byte.toString(16);
    if (bStr.length == 1) bStr = '0' + bStr;
    __ += bStr;
  }
  return __;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
KorsaR-ZN
@KorsaR-ZN
Потому-что он возвращает байт-массив.
Нужно в цикле его преобразовать в 16-ричную хэш строку.

P.S
MD5 - это последовательность 16-ричных цифр, так что там могут быть символы 0-9a-f, а не те, что вы написали в примере.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы