Nano Hash - криптовалюты, майнинг, программирование

Хеширование MD5 в target-c (iOS) на основе общего ключа

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

Проблема в том, что хотя мне и удалось отследить функции, выполняющие хеширование MD5, они не основаны на ключе, что крайне важно.

Есть ли способ сделать это в Objective-C для платформы iOS?

API обычно используется с PHP, который предоставляет что-то вроде этой удобной функции:

$key = hash_hmac('md5', $postdata , $sharedkey);

Есть ли шанс реализовать равный в Objective-C?


  • Проверьте этот форум 11.02.2012
  • хм, да, они упоминают использование функции CC_MD5([self bytes],[self length],digest), которую я использую сейчас. Но, похоже, он не может генерировать на основе ключа в качестве параметра? 11.02.2012
  • возможный дубликат пример кода Objective-C для HMAC-SHA1 11.02.2012
  • На SO есть довольно много вопросов hmac, некоторые из которых включают источник: stackoverflow.com/ 11.02.2012

Ответы:


1

Алгоритм MD5 использует только одну строку в качестве входных данных. Соглашение заключается в том, что вы добавляете свой ключ (также известный как «солт») к строке, которую вы хэшируете. Я предполагаю, что функция PHP MD5 имеет второй параметр для ключа, чтобы упростить жизнь, но вы должны получить тот же результат, если просто сделаете это:

NSString *value = [data stringByAppendingString:key];
NSString *hashed = MD5HASH(value); //pseudocode

ОБНОВЛЕНИЕ:

Хорошо, я проверил Википедию и, похоже, вам нужно немного поработать над реализацией HMAC. -стиль хеширования. Итак, у вас есть два варианта.

  1. Реализуйте алгоритм HMAC поверх хеша MD5, который вы уже используете (это не выглядит слишком сложно — я вставил псевдокод ниже).

  2. Не заморачивайтесь с HMAC — просто сгенерируйте хэш на обоих концах, используя обычный MD5, объединив сообщение и ключ — это должно быть довольно безопасно, это то, что делает большинство людей.

Алгоритм HMAC

function hmac (key, message)
    if (length(key) > blocksize) then
        key = hash(key) // keys longer than blocksize are shortened
    end if
    if (length(key) < blocksize) then
        key = key ∥ [0x00 * (blocksize - length(key))] // keys shorter than blocksize are zero-padded ('∥' is concatenation) 
    end if

    o_key_pad = [0x5c * blocksize] ⊕ key // Where blocksize is that of the underlying hash function
    i_key_pad = [0x36 * blocksize] ⊕ key // Where ⊕ is exclusive or (XOR)

    return hash(o_key_pad ∥ hash(i_key_pad ∥ message)) // Where '∥' is concatenation
end function
11.02.2012
  • Большое спасибо за ответ :) В итоге мы пошли по второму варианту, но не заморачивались с HMAC, а просто генерировали хэш с помощью обычного MD5 :) 14.02.2012

  • 2

    Обычно вы просто добавляете ключ к байтам, которые вы хешируете.

    Итак, если общий секрет равен «12345», и вы передаете имя пользователя = jsd и пароль = test, вы должны построить свою строку как «имя пользователя = jsd и пароль = test & secret = 12345». Затем принимающая сторона создаст свою собственную версию из имени пользователя и пароля + секрета, запустит тот же md5 и получит то же значение.

    11.02.2012
  • Я тоже так думал, но оказалось, что HMAC немного сложнее. 11.02.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..