2

For the sake of curiosity and fun, i have implemented a C# program that operate as deck dealer on 40 cards deck (following the Fisher Yates shuffeling algorithm https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle).

The fun part is that i have used the "faulted" rng that the language provide (small seed compared to cards permutation space and not cryptogaphically secure) and now i am trying to figure out how to write a program that can infer deck permutation only seeing a small fraction (a fifth) of the generation.

So in my scenario, deck dealer program shuffle 40 cards and assign them at each round to one of the 5 player. How can i recostruct the permutation if i see only one player cards? i need some hint here (because seems to me that the shuffling procedure hide a lot of the problem in the pseudo random number generator, so i have no idea how to exploit the problem of that generator and seed). I would premise that i am not a expert on cryptanalysis, just an entusiast

Here the program i wrote :

class Program
{
    private static Random _rng = new Random();
static void Main(string[] args)
{

    for( int i = 0; i < 10; i++)
    {
        Program.ShuffelingAlgorithm();
        Console.WriteLine("\r\n\r\n");
    }
    Console.ReadKey();
}

private static void ShuffelingAlgorithm ()
{
    List<int>[] players = { new List<int>(), new List<int>(), new List<int>(), new List<int>(), new List<int>() };
    int[] cards = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 };

    for (int i = 39; i >= 0; i--)
    {
        int next = _rng.Next(0, i);

        int choosen = cards[next];
        players[i % 5].Add(choosen);

        cards[next] = cards[i];
    }

    foreach (var player in players)
    {
        foreach (int card in player)
            Console.Write(card + "\t");

        Console.WriteLine();
    }
}

}

Skary
  • 371
  • 3
  • 14

0 Answers0