Small problem in password function

I have a password function in my encryption program that has the user enter A password so that no one else can unencrypt their stuff but i have one small problem, when you enter the right password it keeps asking you to enter the password. It does it like 3 or 4 times before taking me to the main program, i dont understand why?

Here is the entire code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>

using namespace std;

void encrypt()
{
    ifstream fIn;
    ifstream passIn;
    string file_name2;
    string store_text2;
    char lower[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','\0'};
    char upper[27] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','\0'};
    char replace[28] = {'♎','×','♋','¼','Ѝ','☩','þ','ß','¤','Œ','Ø','★','유','½','å','¹','°','Ä','@','¡','♯','^','','♚','*','™','✝','\0'};
    char upperReplace[28] = {'³','²','µ','÷','û','ê','ì','Ñ','Д','Ó','Ö','É','п','⅞','Á','¦','Ü','Û','Ù','Õ','я','Ю','Ã','Ш','₧','Æ','✝','\0'};
    char space = ' ';
    int pos = string::npos;

    cin.ignore(100, '\n');

    cout << "What is the exact name of the file for encryption" << endl;
    getline(cin, file_name2);

    fIn.open(file_name2.c_str());

    stringstream ss(stringstream::in | stringstream::app | stringstream::out);

    while(getline(fIn, store_text2))
    {
        ss << store_text2 << endl;
    }

    store_text2 = ss.str();


    //Find lower case alphabet
    for(int i = 0; i < 27; i++)
    {
        while((pos = store_text2.find(lower[i])) != string::npos)
        {
            store_text2[pos] = replace[i];
        }

        while((pos = store_text2.find(upper[i])) != string::npos)
        {
            store_text2[pos] = upperReplace[i];
        }

        while((pos = store_text2.find(space)) != string::npos)
        {
            store_text2[pos] = replace[27];
        }
    }

    ofstream fOut;

    fOut.open(file_name2.c_str());

    fOut << store_text2;

    cout << "File Encrypted\n" << endl;

    cout << store_text2;

    fOut.close();

    cin.sync();
    cin.get();
}


void decrypt()
{
    ifstream fIn;
    string file_name;
    char space = ' ';
    string store_text;
    char lower[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','\0'};
    char upper[27] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','\0'};
    char replace[28] = {'♎','×','♋','¼','Ѝ','☩','þ','ß','¤','Œ','Ø','★','유','½','å','¹','°','Ä','@','¡','♯','^','','♚','*','™','✝','\0'};
    char upperReplace[28] = {'³','²','µ','÷','û','ê','ì','Ñ','Д','Ó','Ö','É','п','⅞','Á','¦','Ü','Û','Ù','Õ','я','Ю','Ã','Ш','₧','Æ','✝','\0'};
    int pos = string::npos;

    cin.ignore(100, '\n');

    cout << "What is the exact name of the file for decryption" << endl;
    getline(cin, file_name);

    fIn.open(file_name.c_str());

    stringstream ss(stringstream::in | stringstream::app | stringstream::out);

    while(getline(fIn, store_text))
    {
        ss << store_text << endl;
    }

    store_text = ss.str();


    for(int i = 0; i < 27; i++)
    {
        while((pos = store_text.find(replace[i])) != string::npos)
        {
            store_text[pos] = lower[i];
        }

        while((pos = store_text.find(upperReplace[i])) != string::npos)
        {
            store_text[pos] = upper[i];
        }

        while((pos = store_text.find(replace[27])) != string::npos)
        {
            store_text[pos] = space;
        }
    }

    ofstream fOut2;

    fOut2.open(file_name.c_str());

    fOut2 << store_text;

    cout << "File Decrypted\n" << endl;

    cout << store_text;

    fOut2.close();

    cin.sync();
    cin.get();
}


void updates()
{
    cout << "Version 1.2.4 Alpha\n" << endl;

    cout << "I added password support so no one else can decrypt your stuff." << endl;
    cout << "I also fixed some bugs\n" << endl;

    cout << "Version 1.1.2 Alpha\n" << endl;

    cout << "I added uppercase letter support but still no support" << endl;
    cout << "for numbers or symbols, thos will be added at a later time.\n" << endl;

    cout << "Version 1.0.2 Alpha\n" << endl;

    cout << "The code has been cleaned up a bit and I also fixed some" << endl;
    cout << "spelling errors.\n" << endl;


    cout << "Version 1.0.0 Alpha\n" << endl;

    cout << "This version is the first build of the software" << endl;
    cout << "it encrypts and decrypts text in text files so no one" << endl;
    cout << "but the program can read it.\n" << endl;

    cin.sync();
    cin.get();
}


int password()
{
    string newPassword;
    string existingPassword;
    string store;
    bool passwordCreated;
    ifstream passIn;
    ofstream passOut;

    passIn.open("PassKey.txt");

    passIn >> passwordCreated;

    while(getline(passIn, store))
    {
        newPassword = store;
    }

    if(passwordCreated == 1)
    {
        passIn >> passwordCreated;

        cout << "Please enter your password" << endl;
        getline(cin, existingPassword);

            if(newPassword != existingPassword)
            {
                cout << "Incorrect password" << endl;
                return 0;
            }
            else if(newPassword == existingPassword)
            {
                cout << "Correct password, Proceed" << endl;
            }
    }

    passOut.open("PassKey.txt");
    passOut << passwordCreated << endl;
    passOut << newPassword << endl;

    //If password is not set up yet, create one

    if(passwordCreated == 0)
    {
        passOut.close();
        passOut.open("PassKey.txt");
        cout << "Please create a password" << endl;

        do
        {
            getline(cin, newPassword);

            if(newPassword.length() <= 4)
            {
                cout << "Your password must be more than 4 characters long!!\n" << endl;
            }
        }
        while(newPassword.length() <= 4);

        if(newPassword.length() > 4)
        {
            passOut << true << endl;
            passOut << newPassword << endl;
            cout << "Your password is: " << newPassword << endl;
        }

        return 1;
        passOut.close();
    }
}


int main()
{
    if(password() == 0) return 0;

    password();

    int choice;

    cout << "\n";
    cout << "Encryptor Version 1.2.4 Alpha\n" << endl;

    cout << "What do you want to do?" << endl;
    cout << "1) Encrypt file" << endl;
    cout << "2) Decrypt file" << endl;
    cout << "3) View software update history" << endl;
    cin >> choice;

    if(choice == 1)
    {
        encrypt();
    }
    else if(choice == 2)
    {
        decrypt();
    }
    else if(choice == 3)
    {
        updates();
    }

    return 0;
}
I get errors:

16	41	[Warning] multi-character character constant [-Wmultichar]
17	82	[Warning] multi-character character constant [-Wmultichar]
82	41	[Warning] multi-character character constant [-Wmultichar]
83	82	[Warning] multi-character character constant [-Wmultichar]
		In function 'void encrypt()':
16	138	[Error] narrowing conversion of '53389' from 'int' to 'char' inside { } [-fpermissive]
16	138	[Warning] overflow in implicit constant conversion [-Woverflow]
17	144	[Error] narrowing conversion of '3616568' from 'int' to 'char' inside { } [-fpermissive]
17	144	[Warning] overflow in implicit constant conversion [-Woverflow]
19	23	[Warning] overflow in implicit constant conversion [-Woverflow]
		In function 'void decrypt()':
82	138	[Error] narrowing conversion of '53389' from 'int' to 'char' inside { } [-fpermissive]
82	138	[Warning] overflow in implicit constant conversion [-Woverflow]
83	144	[Error] narrowing conversion of '3616568' from 'int' to 'char' inside { } [-fpermissive]
83	144	[Warning] overflow in implicit constant conversion [-Woverflow]
84	23	[Warning] overflow in implicit constant conversion [-Woverflow]


EDIT: When I turned off C++11 it was fine. Nevermind.

EDIT2: Okay, I ran the program, created a password, and when I entered the password, it worked fine! Then I exited and restarted the program, entered my password, worked fine again! Then, it exited on its own (you need to fix that) and the end.

EDIT3: Okay, I fixed the exiting on its own by moving the return 1; passOut.close(); outside the if-else statment. Everything works fine!! Good job!

EDIT4: Okay, the encryptor or decryptor does not work. In a file, I entered :

	lala boo
	
	
	
	boo


And then i encrypted it and decypted it and the output is:

	aaaaaboo
	
	
	
	boo
Last edited on
hmm thats weird i dont get any errors
check my edits sorry
i tried it on my side and it workds just fine, encrypting and decrypting. My program asks for the user to enter their password twice thats my problem im having. Im not exactly sure why the decryptor and encryptor arent working. but i have a theory.
Ch1156 wrote:
but i have a theory.

What's your theory?
I am using Orwell Dev C++ with TDM-GCC 4.6.1 if that helps.
Well im using Code::Blocks, but my theory is that some of the symbols are non UTF-8 compatible, thats what my compiler tells me, so my theory is that your computer has different hexidecimal codes thatn my computer does for each symbol. But thats just a theory, i have no idea if thats even true ort not.
this has to be a simple problem with the password function but i cant fgure it out dsoes anyone know? Its the only bug thats keeping my program from being complete
Ch1156 wrote:
this has to be a simple problem with the password function but i cant fgure it out dsoes anyone know? Its the only bug thats keeping my program from being complete

The password program works fine for me. I am using ORWELL Dev C++ with TDM-GCC 4.6.1.
Last edited on
Topic archived. No new replies allowed.