Значок ресурса

Top Secret

Нет прав на скачивание
Автор: John Amphlett
Год: 1985
Издатели: ZX Computing
Языки: 🇬🇧 Английский
Формат: 📼 TAP лента
Требования: 🖥️ ZX Spectrum 48K

Ссылки:
Страница на ZXArt
Страница на World Of Spectrum
Страница на Spectrum Computing

Скриншоты:
TopSecret_3.gif


TOP SECRET


by John Amphlett


from ZX Computing Apr/May.1985





John Amphlett, masterspy of Haverford West,


gives us a means of keeping our secrets safe!








This secret message encoding / decoding program (16K


SPECTRUM) combines a high degree of security with ease of


operation. The main features are:-





A) The original clear message consists of capital letters,


spaces and full stops, making an "alphabet" of 28


characters.





B) The coded message, which has the same length as the clear


original, uses 52 characters, 26 normal and 26 underlined


capital letters. This method of distinguishing the second


half of the coded character set was chosen because both the


Spectrum and the typewriter can easily underline already


printed characters in the same print position.





C) The elements of the original message are changed to coded


ones by shifting the ZX character codes up and around the


alphabet "circle". This is done by adding a variety of fixed


and randomly chosen integers to the codes then subtracting


the necessary multiples of 26. Decoding is performed in the


opposite direction.





D) The special feature of this program, and one that really


makes such high security possible, is that one of these


integers is the ZX code of the already processed previous


element. This means that the value of a coded element


depends partly on the value of its immediate predecessor and


therefore the whole coded message is made much more


difficult to break.





On running the program, the operator is asked to enter the


Code Number (which controls the RANDOMIZE function), the


Code Letter (which becomes the first integer to be added to


the first element) and the Station Number (the number of the


originating operator). Then he must enter "E" or "D" for the


encode or decode mode. Next he types in the message, clear


or coded as appropriate, and after pressing ENTER the


processed message is displayed on the screen. Finally, after


the result is verified, both original and processed messages


are displayed together.





For those readers who are interested in programming


techniques, here is a brief description of the program. The


first section (lines 10 to 60) sets up some of the fixed


variables and gives the initial input prompts. Line 60


ensures that the appropriate clear and coded messages appear


on the screen on the right lines by means of variables E and


D. The second section (lines 85 to 140) uses the familiar


"typewriter" routine to enter the original message. The


important part of this section is the OVERprinting routine


in line 120 which adds an underline character U$ to a


previously printed normal letter when the decode mode is


operating. This is done simply by pressing the "0" key


immediately after the letter so to be treated. Mistakes can


be rectified by pressing the "5" key (line 115) then typing


in the correct letter. Repeated pressing of the "5" key will


erase letters as far back as you wish. Line 110 provides a


BEEP sound when typing and an "end of message" signal which


triggers the jump out of the typing loop. The message is


printed out on the screen as you go and is also concatenated


in B$ in line 125 and subsequently transferred to M$ for use


in either of the next two sections. B$ is returned to a null


string while O$ is held ready for the final display.





The encoding section (lines 200 to 275) takes each element


of M$ in turn, carries out the arithmetic, adds an underline


where appropriate and types out the coded result along the


encoding line on the screen. First, the RANDOMIZE function


and the variable T (the code of the "previous" element) are


set outside the encoding loop and the random number


generator and the variable U (the underline signal) are set


inside. Then the two extra characters, the space (code 32)


and the full stop (code 46), are given code numbers


immediately before the beginning of the letter alphabet


(codes 63 and 64 respectively) by line 225. Then, line 230


makes all the even numbers except 90 change U to zero whilst


all the odd numbers except 63 are left set to unity. The


reason for this is that the letters Y and Z will, after the


reverse arithmetic procedure in the decode mode, end up with


codes 63 and 64, the same as the space and full stop, and


will therefore be incorrectly decoded. Hence the Y and Z are


given the underline signal and will have an extra 26 added


in line 355. The next three lines perform the necessary


arithmetic and in line 250 the value of T is changed to that


of the new A and used next time round the loop. Line 255


adds the underline character to the appropriate coded


element. The message is printed out on the encoding line on


the screen letter by letter, and B$ collects them in a


string as before. The last two lines in this section sort


out what happens next, line 275 passes the coded message to


M$ for use in the next section for the verification routine


and to P$ for use in the final section, while line 270


operates in the decode mode and passes straight to the final


section.








Decoding





The decode section (lines 300 to 375) has the same pattern


as the encode section so that most of the action is similar.


There is, however, one major difference. The coded message


M$ is printed near the bottom of the screen and SCREEN$


picks up the elements one by one in line 325. Where there is


an underlined character, it is not recognised in line 330.


The underline is cancelled by being reprinted, U is changed


to unity and the program refers back to line 325 when the


normal letter is now recognised and processed. It may be


argued that the use of SCREEN$ is a rather clumsy way of


doing things. It would be much simpler and neater to use


M$(X) directly. I agree, but it is much more fun to watch


those underlinings disappear one by one when the decoding


section is working. The final section (lines 400 to 420)


clears the screen and displays both the original and


processed messages in full.





Although the program as it stands works well, there is a


limitation. Only one line of 31 characters can be dealt with


at one time. However, it should be fairly easy to make a few


necessary alterations to the print statements to get over


that. Other improvements spring to mind, such as multiple


coding, speedier action (approximately 12 seconds a line at


the moment), expanding the character vocabulary and so on.


Perhaps it is better to leave it to others to develop these


ideas.








Variables





A$ elements of M$ A arithmetic process


B$ concatenation of A$ B = A/2 (odd or even)


E$ encode/decode input D decode


L$ code letter E encode


M$ complete message N code number


O$ original message R random number


P$ processed message S station number


U$ underline character T "addition" number


V$ continue prompt U underline signal


Z$ one line of spaces X loop control


(CHR$ 8 = back space CHR$ 128 = blank space)








--


Another Fine Product transcribed by:


Jim Grimwood (jimg@globalnet.co.uk), Weardale, England


--
Автор
Verter_bot
Загрузки
0
Просмотры
6
Расширение
zip
Размер
1.6 КБ
Хэш
6aac4de57ddbbd3b2607e5aba0f7d864
Первый выпуск
Последнее обновление

Оценки

0.00 звезд(ы) 0 оценок
Назад
Вверх