Arno Pasternak: Kryptograhie Mit diesem Teilprogramm können die Public-Key-Schlüssel ermittelt werden. Dieses Programm darf natürlich nur der Lehrer als "Zertifikatsstelle" zur Verfügung haben. 0010 //Programm Private_Schlüssel_ermitteln_im_Public-Key-System 0020 // 0030 REPEAT 0040 // PRINT "Public-Key Verschlüsselungssystem" 0050 PRINT 0060 PRINT "0: Ende" 0070 PRINT "1: Satz eingeben:" 0080 PRINT "2: Privaten Schlüssel ermitteln:" 0085 PRINT "5: 2. Privaten Schlüssel ermitteln:" 0090 PRINT "3: Verschlüsseln" 0100 PRINT "4: Entschlüsseln" 0110 PRINT "Bitte eingeben: " 0120 INPUT wahl 0130 // 0140 IF wahl=1 THEN 0150 PRINT "Bitte Satz eingeben: " 0160 INPUT satz$ 0170 ELSE 0180 IF wahl=2 THEN 0190 PRINT "Bitte Code eingeben: " 0200 INPUT code$ 0210 privatenschlüsselermitteln 0220 ELSE 0222 IF wahl=5 THEN 0223 PRINT "Bitte Code eingeben: " 0224 INPUT code$ 0225 zweitenprivatenschlüsselermitteln 0226 ELSE 0230 IF wahl=3 THEN 0240 PRINT "Bitte Code eingeben: " 0250 INPUT code$ 0260 PRINT "Unverschlüsselt: ",satz$ 0270 publickeyverschlüsseln 0280 PRINT "Verschlüsselt: ",satz$ 0290 ELSE 0300 IF wahl=4 THEN 0310 PRINT "Bitte Code eingeben: " 0320 INPUT code$ 0330 PRINT "Verschlüsselt: ",satz$ 0340 publickeyentschlüsseln 0350 PRINT "Entschlüsselt: ",satz$ 0360 ELSE 0370 ENDIF 0371 ENDIF 0380 ENDIF 0390 ENDIF 0400 ENDIF 0410 PRINT 0420 PRINT 0430 UNTIL wahl=0 0440 // 0450 END 0460 // 0470 // 1000 //******************* Prozeduren *************************** 1010 // 1020 PROC publickeyverschlüsseln 1030 // 1040 internercode$:="123" 1050 stelle:=1 1060 codestelle:=1 1070 internercodestelle:=1 1080 REPEAT 1090 asciizahl:=ORD(satz$(:stelle:)) 1100 codezahl:=ORD(code$(:codestelle:))-48 1110 internercodezahl:=ORD(internercode$(:internercodestelle:))-48 1120 summencodezahl:=codezahl+internercodezahl 1130 IF summencodezahl>9 THEN summencodezahl:=summencodezahl-10 1140 asciizahl:=asciizahl+summencodezahl 1150 satz$(:stelle:):=CHR$(asciizahl) 1160 stelle:=stelle+1 1170 IF codestelle=LEN(code$) THEN 1180 codestelle:=1 1190 ELSE 1200 codestelle:=codestelle+1 1210 ENDIF 1220 IF internercodestelle=LEN(internercode$) THEN 1230 internercodestelle:=1 1240 ELSE 1250 internercodestelle:=internercodestelle+1 1260 ENDIF 1270 UNTIL stelle>LEN(satz$) 1280 // 1290 ENDPROC publickeyverschlüsseln 1300 1310 1320 PROC publickeyentschlüsseln 1330 // 1340 stelle:=1 1350 codestelle:=1 1360 REPEAT 1370 asciizahl:=ORD(satz$(:stelle:)) 1380 codezahl:=ORD(code$(:codestelle:))-48 1390 asciizahl:=asciizahl-codezahl 1400 satz$(:stelle:):=CHR$(asciizahl) 1410 stelle:=stelle+1 1420 IF codestelle=LEN(code$) THEN 1430 codestelle:=1 1440 ELSE 1450 codestelle:=codestelle+1 1460 ENDIF 1470 UNTIL stelle>LEN(satz$) 1480 // 1490 ENDPROC publickeyentschlüsseln 1500 PROC privatenschlüsselermitteln 1510 // 1520 internercode$:="123" 1530 codestelle:=1 1540 internercodestelle:=1 1550 PRINT "Der öffentliche Schlüssel lautet: ",code$ 1560 PRINT "Der private Schlüssel lautet: ", 1570 REPEAT 1580 codezahl:=ORD(code$(:codestelle:))-48 1590 internercodezahl:=ORD(internercode$(:internercodestelle:))-48 1600 asciizahl:=codezahl+internercodezahl 1610 IF asciizahl>9 THEN asciizahl:=asciizahl-10 1620 IF codestelle=LEN(code$) THEN 1630 codestelle:=1 1640 ELSE 1650 codestelle:=codestelle+1 1660 ENDIF 1670 IF internercodestelle=LEN(internercode$) THEN 1680 internercodestelle:=1 1690 ELSE 1700 internercodestelle:=internercodestelle+1 1710 ENDIF 1720 PRINT asciizahl, 1730 UNTIL internercodestelle=1 AND codestelle=1 1740 1750 // 1760 ENDPROC privatenschlüsselermitteln 2500 PROC zweitenprivatenschlüsselermitteln 2510 // 2520 internercode$:="123" 2530 codestelle:=1 2540 internercodestelle:=1 2550 PRINT "Der öffentliche Schlüssel lautet: ",code$ 2560 PRINT "Der private Schlüssel lautet: ", 2570 REPEAT 2580 codezahl:=ORD(code$(:codestelle:))-48 2590 internercodezahl:=ORD(internercode$(:internercodestelle:))-48 2600 asciizahl:=codezahl-internercodezahl 2610 IF asciizahl<0 THEN asciizahl:=asciizahl+10 2620 IF codestelle=LEN(code$) THEN 2630 codestelle:=1 2640 ELSE 2650 codestelle:=codestelle+1 2660 ENDIF 2670 IF internercodestelle=LEN(internercode$) THEN 2680 internercodestelle:=1 2690 ELSE 2700 internercodestelle:=internercodestelle+1 2710 ENDIF 2720 PRINT asciizahl, 2730 UNTIL internercodestelle=1 AND codestelle=1 2740 2750 // 2760 ENDPROC zweitenprivatenschlüsselermitteln