-
Notifications
You must be signed in to change notification settings - Fork 0
/
GABSW_passwordManager.java
185 lines (168 loc) · 5.2 KB
/
GABSW_passwordManager.java
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
import java.util.Map;
import java.util.HashMap;
import java.lang.Math;
import java.io.*;
public class GABSW_passwordManager
{
public static void main(String[] args)
{
if(args.length == 0){
System.out.println("Proper usage is: java program command");
System.exit(0);
}
File file;
String filePath;
char[] pass = null;
boolean fileExists = false;
DatabasePW db = new DatabasePW();
filePath = new File("data.ser").getAbsolutePath();
file = new File(filePath);
if(file.isFile()){
fileExists = true;
}
//add method
if(args[0].equals("add")){
if(args.length == 4){
if(fileExists){
pass = getPassNInit();
db = decryptNDeserialize(pass);
db.addEntry(args[1],args[2],args[3]);
SerializeNEncrypt(db);
}
else{
System.out.println("You're creating a fresh database! \nPlease create a master password to protect your passwords");
pass = getPassNInit();
db.addEntry(args[1],args[2],args[3]);
SerializeNEncrypt(db);
}
}
else{System.out.println("add usage: add [website] [username] [password]");}
}
//delete method
if(args[0].equals("delete")){
if(args.length == 2){
if(fileExists){
pass = getPassNInit();
db = decryptNDeserialize(pass);
db.deleteEntry(args[1]);
SerializeNEncrypt(db);
}
else{
System.out.println("You're creating a fresh database! \nPlease create a master password to protect your passwords");
pass = getPassNInit();
db.deleteEntry(args[1]);
SerializeNEncrypt(db);
}
}
else{System.out.println("delete usage: delete [website]");}
}
//update method
if(args[0].equals("update")){
if(args.length == 4){
if(fileExists){
pass = getPassNInit();
db = decryptNDeserialize(pass);
db.updateEntry(args[1],args[2],args[3]);
SerializeNEncrypt(db);
}
else{System.out.println("A database does not exist yet! \nPlease use command add to start a fresh database");}
}
else{System.out.println("update usage: update [website] [NewUsername] [NewPassword]");}
}
//show method
if(args[0].equals("show")){
if(args.length == 2){
if(fileExists){
pass = getPassNInit();
db = decryptNDeserialize(pass);
db.show(args[1]);
SerializeNEncrypt(db);
}
else{System.out.println("A database does not exist yet! \nPlease use command add to start a fresh database");}
}
else{System.out.println("show usage: show [website]");}
}
//showAll method
if(args[0].equals("showAll")){
if(args.length == 1){
if(fileExists){
pass = getPassNInit();
db = decryptNDeserialize(pass);
db.print();
SerializeNEncrypt(db);
}
else{System.out.println("A database does not exist yet! \nPlease use command add to start a fresh database");}
}
else{System.out.println("showAll usage: showAll");}
}
}
private static char[] getPassNInit(){
//get userPass
System.out.println("Please enter your secret code");
Console console = System.console();
char[] userPass = console.readPassword();
Aes.init(userPass);
return userPass;
}
private static void SerializeNEncrypt(DatabasePW myObject){
File file;
String filePath;
try {
//serializing database
filePath = new File("data.ser").getAbsolutePath();
file = new File(filePath);
FileOutputStream fileOut = new FileOutputStream(file);
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(myObject);
out.close();
fileOut.close();
System.out.printf("\nSerialized data is saved in \n" + filePath);
System.out.println("\nnow encrypting...");
//encrypting database
byte[] serializedText = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(serializedText);
fis.close();
//exactly where encryption occurs
byte[] encryptedText = Aes.aesEncrypt(serializedText);
System.out.println("... all done.");
//writing to data.ser
fileOut = new FileOutputStream(file);
fileOut.write(encryptedText);
fileOut.close();
} catch (IOException i) {
i.printStackTrace();
}
}
private static DatabasePW decryptNDeserialize(char[] userPass){
File file;
String filePath;
DatabasePW database = null;
try{
filePath = new File("data.ser").getAbsolutePath();
file = new File(filePath);
//decryption
byte[] deserializedText = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(deserializedText);
fis.close();
byte[] plainText = Aes.aesDecrypt(deserializedText, userPass);
//TODO userPass = Aes.erasePass(userPass);
//writing to data.ser
FileOutputStream fileOut = new FileOutputStream(file);
fileOut.write(plainText);
fileOut.close();
//deserialization
FileInputStream fileIn = new FileInputStream(file);
ObjectInputStream in = new ObjectInputStream(fileIn);
database = (DatabasePW) in.readObject();
in.close();
fileIn.close();
} catch(IOException i) {
i.printStackTrace();
} catch(ClassNotFoundException c){
c.printStackTrace();
}
return database;
}
}