10 'ROT-13 ENCODER/DECODER 20 '*********************************************************************** 30 'FILENAME: OOO31.BAS 40 'DATE: 16/05/1998 50 ' 60 'AIM: 1.Receive input from keyboard or file 61 ' 2.Apply ROT-13 encryption algorithm 62 ' 3.Save output onto disk. 70 ' (Only alphabets will undergo transformation, everything else 90 ' remain unchanged and are also saved onto the disk). 100 ' 110 'Total TIME DEDICATED: 21hours. 120 ' 130 'Output will be save to the file FILENAME$ 140 'Encryption formula is as below. x is input, y is output. 150 '(ie. x is the decimal value of the input character, 160 ' y is the decimal value of the output character) 170 ' 180 'In addition, z is the value of y processed so that y becomes restricted 190 'within the 52-alphabet-mod-field. 200 'z is the final value which will be saved onto disk. 210 ' 220 'Using QBASIC, the index of x can get to as high as 4 or 5 230 'but with GWBASIC the power of 2 is the highest. Powers higher than 240 'these will result in overflow. This problem can be 250 'overcome by replacing MOD function with a loop of division and 260 'subtraction. Eg. keep dividing y by 256 until quotient <=1 then 270 'start subtracting things to obtain a remainder. 300 ' 310 'Tested on Pentium-100. MSDOS6.22 and MSDOS7 480 '*********************************************************************** 490 ' 500 CLS : CLEAR : KEY OFF 510 PRINT "***** ROT-13 ENCRYPTION/DECRIPTION *****" 520 INPUT "Please Enter Output File Name: ", FILENAME$ 530 OPEN FILENAME$ FOR OUTPUT AS #1 540 PRINT "Ready to recieve text now. Press ~ anytime to end" 550 WHILE SLT$ <> "~" 560 SLT$ = INPUT$(1) 570 PRINT SLT$; 580 X=ASC(SLT$) 590 ' 600 ' 610 ' vvvvvvv ENCRYPTION FORMULA vvvvvvv 620 Y = X - 1 630 ' ^^^^^^^ ENCRYPTION FORMULA ^^^^^^^ 640 ' 650 ' 660 ' 670 ENED=Y 680 '^^^ The FORMULA needs to be one-to-one function 690 ' 700 'vvvvvvv Picks out alphabets and leaving out anything else vvvvvvvv 710 IF ASC(SLT$) >= 65 AND ASC(SLT$) <= 90 THEN TRANS = 65: CIS = TRANS ELSE IF ASC(SLT$) >= 97 AND ASC(SLT$) <= 122 THEN TRANS = 97: CIS = TRANS ELSE TRANS = ENED: CIS = ASC(SLT$) 720 '^^^^^^^ Picks out alphabets and leaving out anything else ^^^^^^^^ 730 ' 740 ' 750 ' vvvvv Making sure the difference is within 26 vvvvv 760 IF ENED >= TRANS AND (ENED MOD TRANS) < 26 THEN Z = (ENED MOD TRANS) + CIS 770 IF ENED >= TRANS AND (ENED MOD TRANS) >= 26 THEN Z = ((ENED MOD TRANS) MOD 26) + CIS 780 IF ENED < TRANS AND (ENED MOD TRANS) < 26 THEN Z = ENED - TRANS + CIS + 26 790 IF ENED < TRANS AND (ENED MOD TRANS) >= 26 THEN Z = -((TRANS - ENED) MOD 26) + CIS + 26 800 ' ^^^^^ Making sure the difference is within 26 ^^^^^ 810 ' 820 ' 830 IF SLT$ = "~" THEN SLT$ = "~" ELSE PRINT #1, CHR$(Z); 'LIMIT SET TO MOD-52-ALPHABET FIELD 840 '^^^ The use of ; to have continuous screen and file output 850 WEND 860 CLOSE 870 PRINT : PRINT "Encryption saved to this file => "; FILENAME$ 880 SYSTEM