Hoppa till innehåll

C++ Tecken Problem - Kryptering


Rekommendera inlägg

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.

 

 

Redigerat av Vitdom
Länk till kommentar
Dela på andra sajter

  • 2 veckor senare...

Gå med i konversationen

Du kan skriva nu och registrera dig senare. Om du har ett konto, logga in nu för att posta med ditt konto.

Gäst
Svara på det här ämnet...

×   Klistrade in som rich text.   Klistra in som vanlig text istället

  Endast 75 emojis är tillåtet.

×   Din länk har automatiskt inbäddats.   Visa som en länk istället

×   Ditt tidigare innehåll har återställts.   Rensa redigeraren

×   Du kan inte klistra in bilder direkt. Ladda upp eller infoga bilder från URL.

×
  • Skapa ny...