Вычисление подписи HMAC-SHA - PullRequest
3 голосов
/ 11 апреля 2011

Я пишу модуль для Amazon SimpleDB. Они требуют, чтобы REST-запросы были подписаны с использованием алгоритма HMAC-SHA. ( Подробности здесь. )

Мне сказали, что эта подпись существует для компьютера, но я не могу найти ее в документации . Как называется функция и как выглядят ее аргументы?

Ответы [ 3 ]

1 голос
/ 12 апреля 2011

РЕДАКТИРОВАНИЕ: Должно работать следующее:

pre {
  message = "Four score and seven years ago";
  key = "Abe Lincoln";
  signature = math:hmac_sha256_base64(message, key);
}
notify("Signature is", signature);

Функция math:hmac_sha256_base64(<datastring>,<keystring>)

1 голос
/ 20 мая 2011

Чтобы подписать строки с помощью встроенных символов новой строки (AWS, я говорю с вами!), Вам нужно сделать следующее (на примере AWS S3)

pre {
  raw_string = uri:unescape("GET%0A%0A%0AWed, 28 Mar 2007 01:29:59 +0000%0A/");
  sample_key = "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o";
  signature = math:hmac_sha1_base64(raw_string, sample_key);
  expected = "Db+gepJSUbZKwpx1FR0DLtEYoZA=";
  passfail = (signature eq expected) => "pass" | "fail";
}

Функция uri:decode() возвращает строку с соответствующими символами новой строки, а \n\n\n - нет. Возможно, вам придется добавить завершающий '=' к подписи.

1 голос
/ 11 апреля 2011

HMAC - это стандартная функция, которую можно найти в криптографических библиотеках для большинства платформ.Amazon показывает несколько примеров на странице документации, на которую вы ссылаетесь.

Для Java вы можете найти его в javax.crypto.Mac

Для .Net посмотрите в System.Security.Cryptography

Для KRL я не нашел ни одного встроенного стокового решения.Поскольку представляется возможным встраивать javascript, реализация jsSHA может быть полезной.В математической библиотеке есть функция sha1 , и реализация HMAC в соответствии с RFC2104 не кажется такой сложной.

...