FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
Java/ciphers/RSA.java at master · faLekGG/Java · GitHub
faLekGG
/
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
62 lines (46 loc) · 1.79 KB
Breadcrumbs
Java
/
ciphers
/
RSA.java
Copy path
File metadata and controls
62 lines (46 loc) · 1.79 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
package
ciphers
;
import
java
.
math
.
BigInteger
;
import
java
.
security
.
SecureRandom
;
/**
* Created by Nguyen Duy Tiep on 23-Oct-17.
*/
public
class
RSA
{
private
BigInteger
modulus
,
privateKey
,
publicKey
;
public
RSA
(
int
bits
) {
generateKeys
(
bits
);
}
public
synchronized
String
encrypt
(
String
message
) {
return
(
new
BigInteger
(
message
.
getBytes
())).
modPow
(
publicKey
,
modulus
).
toString
();
}
public
synchronized
BigInteger
encrypt
(
BigInteger
message
) {
return
message
.
modPow
(
publicKey
,
modulus
);
}
public
synchronized
String
decrypt
(
String
message
) {
return
new
String
((
new
BigInteger
(
message
)).
modPow
(
privateKey
,
modulus
).
toByteArray
());
}
public
synchronized
BigInteger
decrypt
(
BigInteger
message
) {
return
message
.
modPow
(
privateKey
,
modulus
);
}
/** Generate a new public and private key set. */
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
);
}
/** Trivial test program. */
public
static
void
main
(
String
[]
args
) {
RSA
rsa
=
new
RSA
(
1024
);
String
text1
=
"This is a message"
;
System
.
out
.
println
(
"Plaintext: "
+
text1
);
String
ciphertext
=
rsa
.
encrypt
(
text1
);
System
.
out
.
println
(
"Ciphertext: "
+
ciphertext
);
System
.
out
.
println
(
"Plaintext: "
+
rsa
.
decrypt
(
ciphertext
));
}
}
Back
|
FazBrowse Home
|
New Git URL