Получение длины ключа
Способ 1. Перебор.
Первый, и более простой способ это перебор. Заключается он в следующем: сначала берём каждую вторую букву, затем каждую третью, четвертую и т.д.
После каждого забора где-нибудь делаем частотный анализ. Если правильная длина - будет похож на обычный, только со сдвигом(или без если буква а). Проще это автоматизировать, например это можно за 2 минуты написать на питоне.
Способ 2. Тест Касиски.
Как-то так. Он не работает для коротких текстов, но, maybe быстрее. Делается это так: ищем в тексте повторяющиеся последовательности букв. Чем длиннее - тем лучше. Затем вычисляем НОД(наибольший общий делитель) их позиций их первых букв в тексте. У первой букве в тексте позиция 0. Если вдруг НОД равен 1, то поищите среди позиций простые числа и удалите их. Все равно могут быть случайные совпадения, но так лучше.
Далее думаем, какой из делителей НОД. Может быть длиной ключа. Например, если НОД равен 15, а шифротекст вы получили от родственника, с помощью которого практикуетесь, то скорее всего этот родственник использовал осмысленное слово, причём средней длины, так что длина ключа скорее всего 5.
А когда и это закончим, смотрим 2 последних шага способа 1.
Получение самого ключа
После подбора длины берём сначала, каждые n-ные буквы(n - длина ключа), затем номер которых при делении оставляет остаток 1, 2, ..., n-1. Это гораздо лучше автоматизировать.
Когда получили все строки - делаем каждой частотный анализ и подбираем сдвиги, как для шифра цезаря. Номер буквы в алфавите будет равен нужному сдвигу плюс 1.
Итого
??-???-???? минут. А если честно, я ещё знаю всё это только в теории(