/* package whatever; // don't place package name! */
//RSA ENCRYPTION AND DECRYPTION
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
int p,q,n,c,d,u,e,m,l,m1;
int i=0;
l = message.length();
System.
out.
println("message is "+message
); while(i <l)
{
m =message.charAt(i)-'a' ;
i++;
p= 3;
q = 7;
e = 2;
n = p*q;
//System.out.println("value of n "+n);
u = (p-1)*(q-1);
// System.out.println("value of u "+u);
while (e < u)
{
if (gcd(e,u)==1)
break;
else
e++;
}
//System.out.println("value of e "+e);
d = solve(e,u);
if(d<0)
d = (d+u)%u;
//System.out.println("d value obtained is"+d);
c
= ((int)Math.
pow(m,d
))%n
; ctext += (char)(c+97);
//System.out.println("encrypted text is"+c);
m1
= ((int)Math.
pow(c,e
))%n
; // System.out.println("decrypted text is"+m);
ans += (char)(m1+97);
}
System.
out.
println("encrypted text is -"+ctext
); System.
out.
println("decrypted text is -"+ans
); int v = verifyalgo(ans,message);
if(v == 1)
System.
out.
println("Bob sent the message"); else
System.
out.
println("Alice sent the message");
}
public static int solve(int a, int b)
{
int x = 0, y = 1, lastx = 1, lasty = 0, temp;
while (b != 0)
{
int q = a / b;
int r = a % b;
a = b;
b = r;
temp = x;
x = lastx - q * x;
lastx = temp;
}
return lastx;
}
{
//System.out.println(m1.compareTo(m));
if(m1.compareTo(m)==0)
return 1;
else
return 0;
}
public static int gcd(int a, int h)
{
int temp;
while (true)
{
temp = a%h;
if (temp == 0)
return h;
a = h;
h = temp;
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwovL1JTQSBFTkNSWVBUSU9OIEFORCBERUNSWVBUSU9OIAppbXBvcnQgamF2YS51dGlsLio7CmltcG9ydCBqYXZhLmxhbmcuKjsKaW1wb3J0IGphdmEuaW8uKjsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUKewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJaW50IHAscSxuLGMsZCx1LGUsbSxsLG0xOwoJCVN0cmluZyBtZXNzYWdlID0gImhpZGUiOwoJCVN0cmluZyBhbnM9IiI7CgkJU3RyaW5nIGN0ZXh0PSIiOwoJCWludCBpPTA7CgkJbCA9IG1lc3NhZ2UubGVuZ3RoKCk7CgkJU3lzdGVtLm91dC5wcmludGxuKCJtZXNzYWdlIGlzICAiK21lc3NhZ2UpOwoJCXdoaWxlKGkgPGwpCgkJewoJCW0gPW1lc3NhZ2UuY2hhckF0KGkpLSdhJyA7CiAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKCQkKCQlwPSAzOwoJCXEgPSA3OwoJCWUgPSAyOwoJCW4gPSBwKnE7CgkJLy9TeXN0ZW0ub3V0LnByaW50bG4oInZhbHVlIG9mIG4gIituKTsKCQl1ID0gKHAtMSkqKHEtMSk7CgkvLwlTeXN0ZW0ub3V0LnByaW50bG4oInZhbHVlIG9mIHUgIit1KTsgCgkKCQkKCQkgd2hpbGUgKGUgPCB1KQogICAgewogICAgICAgCiAgICAgICAgaWYgKGdjZChlLHUpPT0xKQogICAgICAgICAgICBicmVhazsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGUrKzsKICAgIH0KCQkKCi8vU3lzdGVtLm91dC5wcmludGxuKCJ2YWx1ZSBvZiBlICIrZSk7CQoJCWQgPSBzb2x2ZShlLHUpOwoJCQoJCWlmKGQ8MCkKCWQgPSAoZCt1KSV1OwoJLy9TeXN0ZW0ub3V0LnByaW50bG4oImQgdmFsdWUgb2J0YWluZWQgaXMiK2QpOwoJCgljID0gKChpbnQpTWF0aC5wb3cobSxkKSklbjsKCQljdGV4dCArPSAoY2hhcikoYys5Nyk7CgkvL1N5c3RlbS5vdXQucHJpbnRsbigiZW5jcnlwdGVkIHRleHQgaXMiK2MpOwoJbTEgPSAgKChpbnQpTWF0aC5wb3coYyxlKSklbjsKCS8vCVN5c3RlbS5vdXQucHJpbnRsbigiZGVjcnlwdGVkIHRleHQgaXMiK20pOwoJYW5zICs9IChjaGFyKShtMSs5Nyk7Cgl9CgkJU3lzdGVtLm91dC5wcmludGxuKCJlbmNyeXB0ZWQgdGV4dCBpcyAgIC0iK2N0ZXh0KTsKCVN5c3RlbS5vdXQucHJpbnRsbigiZGVjcnlwdGVkIHRleHQgaXMgICAtIithbnMpOwoJaW50IHYgPSB2ZXJpZnlhbGdvKGFucyxtZXNzYWdlKTsKCWlmKHYgPT0gMSkKCVN5c3RlbS5vdXQucHJpbnRsbigiQm9iIHNlbnQgdGhlIG1lc3NhZ2UiKTsKCWVsc2UKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFsaWNlIHNlbnQgdGhlIG1lc3NhZ2UiKTsKCQoJCgl9CgkKCSAgICAgcHVibGljIHN0YXRpYyAgaW50IHNvbHZlKGludCAgYSwgaW50IGIpCiAgICB7CiAgICAgICAgaW50IHggPSAwLCB5ID0gMSwgbGFzdHggPSAxLCBsYXN0eSA9IDAsIHRlbXA7CiAgICAgICAgd2hpbGUgKGIgIT0gMCkKICAgICAgICB7CiAgICAgICAgICAgaW50IHEgPSBhIC8gYjsKICAgICAgICAgICBpbnQgIHIgPSBhICUgYjsKIAogICAgICAgICAgICBhID0gYjsKICAgICAgICAgICAgYiA9IHI7CiAKICAgICAgICAgICAgdGVtcCA9IHg7CiAgICAgICAgICAgIHggPSBsYXN0eCAtIHEgKiB4OwogICAgICAgICAgICBsYXN0eCA9IHRlbXA7CiAKICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIH0KICAgICAgIHJldHVybiBsYXN0eDsKICAgIH0KICAgIAogICAgCiAgICAgICBwdWJsaWMgc3RhdGljIGludCB2ZXJpZnlhbGdvKFN0cmluZyBtMSAsU3RyaW5nIG0pCnsKCQoJLy9TeXN0ZW0ub3V0LnByaW50bG4obTEuY29tcGFyZVRvKG0pKTsKICAgaWYobTEuY29tcGFyZVRvKG0pPT0wKQogICByZXR1cm4gMTsKICAgZWxzZQogICByZXR1cm4gMDsKfQogICAgCiAgICAKICAgcHVibGljIHN0YXRpYyBpbnQgZ2NkKGludCBhLCBpbnQgaCkKewogICAgaW50IHRlbXA7CiAgICB3aGlsZSAodHJ1ZSkKICAgIHsKICAgICAgICB0ZW1wID0gYSVoOwogICAgICAgIGlmICh0ZW1wID09IDApCiAgICAgICAgICByZXR1cm4gaDsKICAgICAgICBhID0gaDsKICAgICAgICBoID0gdGVtcDsKICAgIH0KfQogICAgCiAgICAKfQ==