Аналог SecureRandom() в PHP

160
27 февраля 2019, 12:50
<?php
 $choices = array(
  '2' => '1',
  '1' => '3',
  '3' => '2'
 );
while ( true ) {
  $computer_move = $choices[array_rand($choices)];
  do {
    echo("1 - Rock \n2 - Paper \n3 - Scissors\n0 - exit \nComputer has made a move. HMACSHA256 proof: "
         );
    echo hash_hmac('sha256','$computer_move');
    echo("\nYour Move: ");
    $human_move = strtolower(trim(fgets(STDIN)));
    echo("\nComputer's move was: $computer_move\n");
  //????????????????????
} while (!in_array($human_move, $choices));
// calculate winner
if ($human_move == $computer_move) {
    echo("\nTie, Replay!\n");
} else if ($choices[$human_move] == $computer_move) {
    echo("\nYou Win!\n");
    break;
} else if ($choices[$computer_move] == $human_move) {
    echo("\nComputer Wins!\n");
    break;
}

}

Всем Привет. Имеется игра в камень-ножницы-бумага. Необходимо сгенерировать хэш-код HMAC sha256 с (моей точки зрения) помощью hash() либо hash_hmac().

До хода пользователя компьютер уже принимает решение (то есть выбирает через SecureRandom(не в пэхе) один из вариантов камень/ножницы...) и выводит на экран результат работы хэш-функции. После пользователь выбирает так же один вариант из камень/ножницы и т.д. Только после этого компьютер выводит значение ключа, который использовался для подсчета этой хэш-функции. Взяв этот ключ и значение, которое вывел компьютер (камень/ножницы...) и передав их снова в хэш-функцию можно удостовериться, что она идентична той, что вывел компьютер до хода пользователя.

Подскажите пожалйста, как решить это дело и как можно сгенерировать ключ.

Answer 1

Используйте функцию hash_hmac вместе с sha256, пояснение: $string - ваша строка для хэширования, $secret - общий секретный ключ для генерации HMAC хэш-кода.

$generate = hash_hmac('sha256', $string, $secret);
READ ALSO
Неправильно отображается элемент

Неправильно отображается элемент

Нужно найти максимум и минимум функции при 3 параметрахПри первых 2х выводится правильно, в 3 почему-то появляются другие числа

161
C++ Как создать таймер?

C++ Как создать таймер?

Как создать таймер в C++? Пробовал SetTimer с USER_TIMER_MINIMUM но он медленный, нужен таймер с интервалом больше 60 раз в секунду

185
c++ перемещение и неизменяемый класс

c++ перемещение и неизменяемый класс

Я хочу разобраться в следующей ситуации

194
std::vector и emplace_back()

std::vector и emplace_back()

Правильно ли я понимаю, что метод std::vector::emplace_back() вызывает конструктор, но не конструктор перемещения?

178