Forum: C++ Tecken Problem - Kryptering(ROT47)

Forum huvudsida -> Programmering -> C++ Tecken Problem - Kryptering(ROT47)

Sidor: 1

Till botten

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
  • = 42
+ = 43
, = 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,Smiley) 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!Smiley

Ny kod:
string encryption_engine(int method, int mode, string text)
{
    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;
}
Smiley Nu fungerar det.

-------------------------



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)
Atom feed

Du får inte posta i den här tråden | Till toppen