FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
Java/ciphers/RSA.java at master · devil00/Java · GitHub
devil00
/
Java
Public
forked from
TheAlgorithms/Java
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
Java
/
ciphers
/
RSA.java
Copy path
More file actions
More file actions
Latest commit
History
History
History
98 lines (80 loc) · 2.46 KB
Breadcrumbs
Java
/
ciphers
/
RSA.java
Copy path
File metadata and controls
98 lines (80 loc) · 2.46 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
package
ciphers
;
import
java
.
math
.
BigInteger
;
import
java
.
security
.
SecureRandom
;
import
javax
.
swing
.
JOptionPane
;
/**
* @author Nguyen Duy Tiep on 23-Oct-17.
*/
public
final
class
RSA
{
/**
* Trivial test program.
*
* @param args
* @deprecated TODO remove main and make JUnit Testing or any other
* methodology
*/
public
static
void
main
(
String
[]
args
) {
RSA
rsa
=
new
RSA
(
1024
);
String
text1
=
JOptionPane
.
showInputDialog
(
"Enter a message to encrypt :"
);
String
ciphertext
=
rsa
.
encrypt
(
text1
);
JOptionPane
.
showMessageDialog
(
null
,
"Your encrypted message : "
+
ciphertext
);
JOptionPane
.
showMessageDialog
(
null
,
"Your message after decrypt : "
+
rsa
.
decrypt
(
ciphertext
));
}
private
BigInteger
modulus
,
privateKey
,
publicKey
;
/**
*
* @param bits
*/
public
RSA
(
int
bits
) {
generateKeys
(
bits
);
}
/**
*
* @param message
* @return encrypted message
*/
public
synchronized
String
encrypt
(
String
message
) {
return
(
new
BigInteger
(
message
.
getBytes
())).
modPow
(
publicKey
,
modulus
).
toString
();
}
/**
*
* @param message
* @return encrypted message as big integer
*/
public
synchronized
BigInteger
encrypt
(
BigInteger
message
) {
return
message
.
modPow
(
publicKey
,
modulus
);
}
/**
*
* @param encryptedMessage
* @return plain message
*/
public
synchronized
String
decrypt
(
String
encryptedMessage
) {
return
new
String
((
new
BigInteger
(
encryptedMessage
)).
modPow
(
privateKey
,
modulus
).
toByteArray
());
}
/**
*
* @param encryptedMessage
* @return plain message as big integer
*/
public
synchronized
BigInteger
decrypt
(
BigInteger
encryptedMessage
) {
return
encryptedMessage
.
modPow
(
privateKey
,
modulus
);
}
/**
* Generate a new public and private key set.
*
* @param bits
*/
public
synchronized
void
generateKeys
(
int
bits
) {
SecureRandom
r
=
new
SecureRandom
();
BigInteger
p
=
new
BigInteger
(
bits
/
2
,
100
,
r
);
BigInteger
q
=
new
BigInteger
(
bits
/
2
,
100
,
r
);
modulus
=
p
.
multiply
(
q
);
BigInteger
m
= (
p
.
subtract
(
BigInteger
.
ONE
)).
multiply
(
q
.
subtract
(
BigInteger
.
ONE
));
publicKey
=
new
BigInteger
(
"3"
);
while
(
m
.
gcd
(
publicKey
).
intValue
() >
1
) {
publicKey
=
publicKey
.
add
(
new
BigInteger
(
"2"
));
}
privateKey
=
publicKey
.
modInverse
(
m
);
}
}
Back
|
FazBrowse Home
|
New Git URL