Forum huvudsida -> Programmering -> C++ Tecken Problem - Kryptering(ROT47)
Sidor: 1
Vitdom | 21:30 - 5:e Juni 2008 | Post #1 | |
Medlem Inlägg: 71 Skicka PM |
Jag påbörjade just ett krypterings program. Allting är klart men den vill inte bete sig som jag vill att den ska. string encryption_engine(int method, int mode, string text) { switch (method) { case 1: // ROT47 for(int i = 0; i < text.size(); i++) if(text[i] >= '!' && text[i] <= '~') { text[i] += 47; if(text[i] > '~') text[i] -= 94; } break; } return text; } Det är meningen att den ska flytta fram varje tecken 47 steg inom ASCIIs !(33) till ~(126) alfabet, och om den kommer utanför det(126+) drar den av 94 för att få tillbaks den till det normala alfabetet. Jag har redan kontrollerat så att ASCII tabellen stämmer med min dator: ! = 33 " = 34 # = 35 $ = 36 % = 37 & = 38 ' = 39 ( = 40 ) = 41
, = 44 - = 45 . = 46 / = 47 0 = 48 1 = 49 2 = 50 3 = 51 4 = 52 5 = 53 6 = 54 7 = 55 8 = 56 9 = 57 : = 58 ; = 59 < = 60 = = 61 > = 62 ? = 63 @ = 64 A = 65 B = 66 C = 67 D = 68 E = 69 F = 70 G = 71 H = 72 I = 73 J = 74 K = 75 L = 76 M = 77 N = 78 O = 79 P = 80 Q = 81 R = 82 S = 83 T = 84 U = 85 V = 86 W = 87 X = 88 Y = 89 Z = 90 [ = 91 \ = 92 ] = 93 ^ = 94 _ = 95 ` = 96 a = 97 b = 98 c = 99 d = 100 e = 101 f = 102 g = 103 h = 104 i = 105 j = 106 k = 107 l = 108 m = 109 n = 110 o = 111 p = 112 q = 113 r = 114 s = 115 t = 116 u = 117 v = 118 w = 119 x = 120 y = 121 z = 122 { = 123 | = 124 } = 125 ~ = 126 Exempel på körning av mitt program: Encrypter v1.0 Programmed with C++ by Vitdom Instructions: Select encryption method. Menu: 0. Exit. 1. ROT47. Choise: 1 Method: ROT47 Menu: 1. Encrypt. 2. Decrypt. Choise: 1 Text: hej Your encrypted text: ��� Instructions: Select encryption method. Menu: 0. Exit. 1. ROT47. Choise: 0 Men när jag skriver in ! så skriver den ut P, det den ska skriva ut. Men när den passerar 126 gränsen verkar det som att det händer något konstigt, typ som avdragnings satsen inte körs. -------------------------
|
Omega | 23:30 - 5:e Juni 2008 | Post #2 | |
Medlem Inlägg: 42 Skicka PM |
Hej! 126 är ju '~' och finns ju med i villkoret if(text[i] >= '!' && text[i] <= '~') och avdraget sker ju inom den if-satsen. "den ska flytta fram varje tecken 47 steg inom ASCIIs !(33) till ~(126)" Var det inte det du ville? ------------------------- Fall omkull sju gånger och res dig upp åtta. |
Vitdom | 07:34 - 6:e Juni 2008 | Post #3 | |
Medlem Inlägg: 71 Skicka PM |
Jag vill att om tecknet är inom 33 och 126 så ska det flyttas fram 47 steg, och sen testar den om den kommit utanför 126, om den kommit utanför så drar den av 94 för att börja om vid 33. Så om man skriver tillexempel "hej" ska den flytta fram så att det blir "96;", inte som det blir nu "���". Jag en idé. Eftersom en tecken variabel(char, vet inte hur det är med string men det fungerar ju,) bara kan hantera låga värden, skapar jag en int variabel som man kan hålla beräkningarna som kan hantera större värden, sen när beräkningarna är klara deklarerar man tecknet den nya teckenkoden! Ny kod: string encryption_engine(int method, int mode, string text) Nu fungerar det.{ int tmpvalue; switch (method) { case 1: // ROT47 for(int i = 0; i < text.size(); i++) if(text[i] >= '!' && text[i] <= '~') { tmpvalue = text[i] + 47; if(tmpvalue > '~') tmpvalue -= 94; text[i] = tmpvalue; } break; } return text; } -------------------------
Senast redigerad 08:17 - 6:e Juni 2008 |
ELF | 14:19 - 17:e Juli 2008 | Post #4 | |
Medlem Inlägg: 73 Skicka PM |
Två undringar... Krypterar du även mellanslag eller sepparerar du dom krypterade orden med mellanrum? text.size ,,r det ascii koden? ------------------------- May the Elf be with you |
Vitdom | 20:54 - 17:e Juli 2008 | Post #5 | |
Medlem Inlägg: 71 Skicka PM |
Nej, ROT47 hanterar inte mellanslag, då det då blir ROT47,5, och så måste man hålla på att kolla om man vill kryptera eller avkryptera då det är en ojämn(udda) teckenintervall. ROT47 är oberoende av om man vill kryptera/avkryptera. text.size() är text:ens totala använda mängd tecken. Om man tilldelar en integer variabel ett tecken i string variabeln konverteras den automatiskt till ett heltal(ASCII koden). Du kan ju kolla min tråd på fuska.se där jag släppt detta program i fullversion(även källkoden): http://www.fuska.se/forum/Encrypter_200ny-t102855.html -------------------------
Senast redigerad 21:03 - 17:e Juli 2008 |
ELF | 12:21 - 18:e Juli 2008 | Post #6 | |
Medlem Inlägg: 73 Skicka PM |
Ok, men vad händer med mellanslag då? ------------------------- May the Elf be with you |
Vitdom | 12:27 - 18:e Juli 2008 | Post #7 | |
Medlem Inlägg: 71 Skicka PM |
Det blir kvar som det är där det är i sträng variabeln, altså orört. Det är satsen if(text[i] >= '!' && text[i] <= '~') som filtrerar bort mellanslaget från roteringskoden som har värdet ett snäpp mindre än '!'. T.ex: In: Hello! Good bye! Ut: w6==@P v@@5 3J6P -------------------------
Senast redigerad 12:29 - 18:e Juli 2008 |
ELF | 23:19 - 18:e Juli 2008 | Post #8 | |
Medlem Inlägg: 73 Skicka PM |
Ok, då fattar jag... Tack ------------------------- May the Elf be with you |
Sidor: 1
Forum huvudsida -> Programmering -> C++ Tecken Problem - Kryptering(ROT47)
Du får inte posta i den här tråden | Till toppen
Datum
2025-01-03 10:17
Vecka: 01
Besökare
Inloggade: 0
Gäster: 605
Medlemmar
Medlemmar: 53576
Forum
Senaste inlägget: HAHA MÄNNISKAN LEVER ÄN (13:45 - 18:e Januari 2019, av Hetzz)
Wiki
Senaste ändringen:
3D (rev: 1, tid: 09:40 - 13:e November 2015)
Chatt
#blinkenlights @ Libera.Chat
Gratis shellkonton för IRC, webbsidor mm.