Shuffle Table Generator
=======================
The `LicenseKey` class converts a GUID (or any 128 bits of data) into a license key similar
to the ones used by Microsoft products (5 groups of 5 alphanumeric characters).
For additional obfuscation, bits can be mapped in a random order. That will offer some
protection when you have, for example, a running serial number. With shuffling, each
increment will result in likely several alphanumeric characters changing in seemingly
unpredictable ways (base-2 to base-36 conversion pretty much guarantees that any small
change affects many following alphanumeric "digits").
/// Generates a new random shuffle table
///
/// Number of iterations in which to randomize the shuffle table
///
/// The new random shuffle table
public static byte[] generateShuffleTable(int iterationCount) {
byte[] shuffleTable = new byte[128];
for(int index = 0; index < 128; ++index)
shuffleTable[index] = index;
Random rng = new Random();
for(int iteration = 0; iteration < iterationCount; ++iteration) {
int firstIndex = rng.Next() % 128;
int secondIndex = rng.Next() % 128;
byte temp = shuffleTable[firstIndex];
shuffleTable[firstIndex] = shuffleTable[secondIndex];
shuffleTable[secondIndex] = temp;
}
return shuffleTable;
}