Тестирование случайности строки символов - PullRequest
1 голос
/ 29 ноября 2011

У меня есть шифр, с которым я играю, который имитирует одноразовый блокнот .Я хотел бы провести тестирование ключей, которые я генерирую, чтобы увидеть, где они лежат в масштабе от случайного до псевдослучайного.Я нашел несколько наборов тестов, которые работают с двоичными строками, но ни один из них не работает со строками символов.Существуют ли тестовые наборы, которые будут работать с символьными строками (или целочисленными строками)?Если нет, то какой будет правильный способ преобразования строки символов в двоичную строку?

1 Ответ

1 голос
/ 29 ноября 2011

Строка символов - это двоичная строка.Единственное, что, если вы ограничите его определенными «печатными» символами, есть некоторые битовые шаблоны, которые никогда не используются.

Например, если вы ограничиваете строку символами A...Z, то используются только 26 из 256 возможных 8-битных значений.Таким образом, теоретически можно отобразить A...Z на 0,1...24,25, а затем вычислить charIndex[0] + charIndex[1] * 26 + charIndex[2] * 26 * 26 ..., чтобы получить «объективное» числовое значение всей строки.Это, конечно, не практично, но, возможно, это дает вам представление.

Менее сложным является просто учитывать относительную вероятность отдельных персонажей.То есть все символы вашего «алфавита» должны встречаться с одинаковой частотой, и, учитывая, например, что произошла строка «KFUTRP», все символы вашего алфавита должны быть одинаково вероятны как следующий символ.

Возможно, более сложным, но менее ограничительным является позволить персонажам иметь разные частоты, но при этом «KFUTRP» не «предсказывает» какого-либо персонажа с большей / меньшей вероятностью, чем его общая частота.

В конечном счете, речь идет о способностипоследовательности символов, чтобы «предсказать» следующий символ в последовательности.

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

...