-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfirst.java
More file actions
127 lines (122 loc) · 4.19 KB
/
first.java
File metadata and controls
127 lines (122 loc) · 4.19 KB
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
package first;
import java.security.MessageDigest;
import java.util.*;
import sun.misc.BASE64Encoder;
import java.io.IOException;
class StringXORer // TO EVALUATE THE XOR VALUE OF TWO GIVEN STRINGS
{
public String xor(String st1,String st2)
{
String res="";
int n=0;
if(st1.length()>st2.length())
{
for(int i=st2.length();i<st1.length();i++)
st2=st2+"0";
n=st1.length();
}
else if(st1.length()<st2.length())
{
for(int i=st1.length();i<st2.length();i++)
{
st1=st1+"0";
}
n = st2.length();
}
else
n=st1.length();
for(int i=0;i<n;i++)
{
res=res+(char)(st2.charAt(i)^st1.charAt(i));
}
return res;
}
}
class OneWayHash // TO EVALUATE THE ONE-WAY-HASH VALUE OF A STRING USING "SHA-256"
{
public String getStringFromSHA256(String example)
{
StringBuffer sb = new StringBuffer();
byte byteData[];
int l;
try
{
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(example.getBytes());
byteData = messageDigest.digest();
l = byteData.length;
}
catch(Exception ex)
{
throw new RuntimeException(ex);
}
for (int i = 0; i < l; i++)
{
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
}
public class First
{
public static void main(String[] args)// MAIN METHOD
{
Scanner sc = new Scanner(System.in);
System.out.println("Enter the ID :");
int ID = sc.nextInt();
System.out.println("Enter the PASSWORD :");
Scanner sc1 = new Scanner(System.in);
String PW = sc1.nextLine();
String ID_str = Integer.toString(ID);
System.out.println("Enter the BIOMETRIC data:");
Scanner sc2 = new Scanner(System.in);
String bio = sc2.nextLine(); // RANDOM BIOMETRIC SEQUENCE
StringXORer obj1 = new StringXORer();
OneWayHash obj2 = new OneWayHash();
int PSK = 8956;
String PSK_str = Integer.toString(PSK);
int port = 5241; // x value of the RC
String port_str = Integer.toString(port);
String Ai = obj2.getStringFromSHA256(ID_str + port_str);
String Bi = obj2.getStringFromSHA256(Ai);
String Ci = obj1.xor(obj2.getStringFromSHA256(obj1.xor(PW,bio)),Bi);
String Di = obj1.xor(PSK_str,Ai);
System.out.println("\nValues generated by the Registration Center(RC) on the smart card are : \n");
System.out.println("ID : "+ID);
System.out.println("Bi : "+Bi);
System.out.println("Ci : "+Ci);
System.out.println("Di : "+Di);
System.out.println("\nEntering the login phase\n");
Scanner sc3 = new Scanner(System.in);
System.out.println("Enter the ID :");
int IDnew = sc3.nextInt();
System.out.println("Enter the PASSWORD :");
Scanner sc4 = new Scanner(System.in);
String PWnew = sc4.nextLine();
String ID_strNew = Integer.toString(ID);
System.out.println("Enter the BIOMETRIC data:");
Scanner sc5 = new Scanner(System.in);
String bioNew = sc5.nextLine(); // RANDOM BIOMETRIC SEQUENCE
String res = obj1.xor(obj2.getStringFromSHA256(obj1.xor(PWnew, bioNew)),Ci);
if(res.equals(Bi))
{
System.out.println("\nLOGIN SUCCESSFUL");
Random rand = new Random();
int N = rand.nextInt(1000000) + 1000;
String N1 = Integer.toString(N);
System.out.println("N1 : "+N1);
String M1 = obj1.xor(obj2.getStringFromSHA256(Bi),N1);
System.out.println("M1 : "+M1);
String AID = obj1.xor(obj2.getStringFromSHA256(N1),ID_strNew);
System.out.println("AID : "+AID);
String M2 = obj2.getStringFromSHA256(N1 + AID + Di);
System.out.println("\nMessage generated for authentication : ");
System.out.println("M2 : "+M2);
}
else
{
System.out.println("\nLOGIN FAILED");
return;
}
}
}