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.
Jag en idé. Eftersom en tecken variabel(char, vet inte hur det är med string men det fungerar ju, :P) 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 tilldelar man tecken variabeln den nya teckenkoden! :D
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;
}
:P Nu fungerar det.