Oczywiście potrzebujemy bardziej praktycznego rozwiązania. Osiąga się to poprzez poświęcenie doskonałego bezpieczeństwa na rzecz znacznie krótszego klucza i bardziej złożonego krypto. Istnieje wiele sposobów na osiągnięcie tego. Niektóre opierają się na zasadzie generowania liczb, które wydają się losowe, które są następnie używane zasadniczo w taki sam sposób, jak klawisze jednorazowego bloku. Inne tasują (permutują) dane w wiadomości w kolejności opartej na pozornie losowym kluczu. Bardzo prostym przykładem tego pierwszego (który jest bardzo ubogi pod względem kryptograficznym) jest rejestr przesuwny z liniowym sprzężeniem zwrotnym. Rejestr przesuwny umożliwia sekwencyjne przesuwanie wzorców bitowych od lewej do prawej. W pokazanym urządzeniu niektóre z tych bitów są również odczepiane i przekazywane przez zamknięte przełączniki (2, 5 i n) do urządzenia funkcyjnego „LUB”. Funkcja LUB wykonuje serię operacji dodawania połowy (0 + 0 = 1 , 0 + 1 = 1 , 1 + 1 = 0) na danych, tak że parzysta liczba jedynek da odpowiedź 0, a nieparzysta number da 1. Odpowiedź brzmi ‘OR’d’ z pierwszym bitem tekstu jawnego, tym samym szyfrując go. Odpowiedź jest również „sprzężenie zwrotne” do lewej komórki rejestru przesuwnego po tym, jak wszystkie inne bity w niej przesunęły się o jedno miejsce w prawo. To jest przykład szyfru strumieniowego: strumień pseudolosowych bitów jest generowany przez krypto i dodawany bit po bicie do kolejnych bitów zwykłego tekstu. Możliwe jest wykazanie, że prawowici odbiorcy danych mogą je odszyfrować za pomocą podobnego urządzenia, pod warunkiem, że wiedzą, które przełączniki są zamknięte i sekwencję startową (w tym przypadku 110100). „Krypto” składa się z przesunięcia rejestru i generatora funkcji (w tym przypadku funkcja OR). Należy założyć, że atakujący może mieć przynajmniej pewną wiedzę na temat liczby stopni w rejestrze przesuwnym i natury generatora funkcji. Jedynym zabezpieczeniem, jakie można założyć, jest zabezpieczenie zawarte w kluczu. W tym urządzeniu klucz składa się z dwóch elementów: sekwencji startowej i ustawień przełącznika. Muszą one być wymieniane między nadawcą a odbiorcą za pomocą bezpiecznego kanału (na przykład zaufanego posłańca) i utrzymywane w tajemnicy, dopóki nie będzie można użyć nowego zestawu. Praktyczne systemy wykorzystują funkcje inne niż pojedynczy rejestr przesuwny ze sprzężeniem zwrotnym i prostą funkcją OR. Podczas gdy pojedynczy rejestr przesuwny zapewnia pewne bezpieczeństwo, gdy atakujący nie ma wiedzy o treści wiadomości, jest bardzo słaby, gdy część tekstu jest znana lub można ją odgadnąć. (Na przykład wiele liter zaczyna się „Szanowny Panie”, zawiera datę lub kończy się równie konwencjonalnie.) W tym przypadku można wykazać, że system zawsze może zostać uszkodzony, mając mniej niż 10N kolejnych bitów tekstu jawnego, gdzie N to liczba etapów w rejestrze przesuwnym. Należy z tego wyciągnąć dwa ważne punkty: po pierwsze, systemy kryptograficzne muszą brać pod uwagę zarówno praktyczność, jak i teorię, a w szczególności możliwość, że atakujący zaczyna mieć więcej niż zerową wiedzę. Po drugie, krytycznym czynnikiem projektowym jest stosunek wysiłku atakującego do wymaganego przez uprawnionych użytkowników. To, co musimy osiągnąć, to przedstawienie atakującemu stopnia trudności, który rośnie szybciej niż jakikolwiek wzrost złożoności krypto. Nie jest to prawdą w przypadku rejestru przesuwnego, gdzie złożoność systemu i jego podatność na ataki rosną „liniowo”, to znaczy z N. Chcielibyśmy, aby system, którego złożoność można było zwiększyć o N, z wynikający z tego wzrost trudności ataku o (przynajmniej) NM, gdzie M jest pewną dużą liczbą. Niektóre praktyczne alternatywy oferujące lepsze zabezpieczenia obejmują kaskady rejestrów przesuwnych, których tryby działania oddziałują na siebie. Na przykład możemy wykorzystać wyjście jednego rejestru do sterowania zegarem sterującym następnym; to znaczy sprawić, by poruszał się na więcej niż jednej zmianie na raz.