[sourcecode language="cpp"]
/ / Header File – Aplikasi RSA
/ / Algoritma Rabin Miller & – Test untuk primality
/ / Pseudorandom Nomor Generator Algoritma
/ / Relatif Perdana – Algoritma Euclid
# Include <iostream.h>
# Include
# Include
# Include <string.h>
# Include <conio.h>
# Include <math.h>
# Include <process.h>
kelas RSA
{
publik:
int PR1, PR2, x1, n, n1;
int e, d, pt;
int a [20], b [10];
int len; panjang array / / biner
RSA ();
/ / Algoritma Rabin Miller & – Test untuk primality
kekosongan testprimality ();
/ / Pseudorandom Nomor Generator Algoritma
kekosongan pseudo1 ();
int pseudo2 ();
/ / Relatif Perdana – Algoritma Euclid
/ / GCD dari dua angka-mereka faktor umum adalah ’1 ‘
kekosongan relprime ();
int FPB (int c, int d);
/ / Key Generasi
int keygenerate1 (int ptext); / / untuk Enkripsi
int keygenerate2 (int ctext); / / untuk Dekripsi
kekosongan decitobin (int x);
/ / Enkripsi
int mengenkripsi (int num);
/ / Dekripsi
mendekripsi int (int ctext);
};
/ / Interface File – Aplikasi RSA
/ / Algoritma Rabin Miller & – Test untuk primality
/ / Pseudorandom Nomor Generator Algoritma
/ / Relatif Perdana – Algoritma Euclid
# Include "rh1.h"
RSA:: RSA ()
{
x1 = 1;
PR1 = 0;
PR2 = 0;
}
/ / Algoritma Rabin Miller & – Test untuk primality
kekosongan RSA:: testprimality ()
{
int a, j, p1, q, x;
int t1, t2;
int k, bendera, ch;
ch = 1;
bendera = 0;
k = 0;
/ / (N-1) = pow (2, k) * q
/ / Membagi (n-1) dengan 2 sampai hasil adalah nomor ganjil
sementara (ch)
{
x = (n-1) / (int) (pow (2, k));
if (FMOD (x, 2) == 1)
{
ch = 0;
break;
}
k + +;
}
q = (int) ((n-1) / (pow (2, k)));
/ / Untuk memilih secara acak integer yang
/ / Harus kurang dari ‘n’;
/ / Itulah mengapa memanggil pseudo2 ()
a = pseudo2 ();
jika (a> 1 & & a <(n-1))
{
t1 = (int) (pow (a, q));
if ((t1% n) == 1)
flag = 1;
lain
{
for (j = 0; j <= (k-1); j + +)
{
p1 = ((int) (pow (2, j))) * q;
t2 = (int) pow (a, p1);
if ((t2% n) == (n-1))
flag = 1;
}
}
}
if (bendera == 1)
if (PR1 == 0)
PR1 = n;
lain jika (= 0 & pr1! & PR2 == 0)
PR2 = n;
}
/ / Pseudorandom Nomor Generator Algoritma
kekosongan RSA:: pseudo1 ()
{
/ / Untuk memilih ‘n’ pseudorandomly dan lolos ke testprimality ();
/ / ‘N’ adalah harus dibuktikan baik utama atau tidak prima
int a, c, y;
unsigned int m;
y = 0;
a = (int) pow (7,5); / / (7,2), * (7,4), (7,5)
/ / (Int) pow (7,5) digunakan dalam IBM 360
/ / M harus diberi "utama" tidak.
/ / Sampai dengan pow (2,31) harus digunakan.
/ / (2,5) -1; (2,7) -1; (2,13) ??-1;
/ / (2,17) -1; (2,19) -1; (2,31) -1 bilangan prima
m = ((int) pow (2,7)) -1; / / (2,7)
n = 1; c = 0;
for (int i = 0; i <50; i + +)
{
n = ((a * n) + c) m%;
testprimality ();
/ / N akan dihitung dalam textprimality ()
}
/ / Cout <<"
PR1 = "<<PR1;
/ / Cout <<"
PR2 = "<<PR2;
}
int RSA:: pseudo2 ()
{
/ / Untuk memilih secara acak integer yang
/ / Harus kurang dari ‘n’
int a, ret;
unsigned int m;
a = (int) pow (7,4); / / (7,3), * (7,4) untuk a (7,5) di pseudo1
m = (int) pow (2,5) -1; / / (2,5)
ret = (a * x1) m%;
x1 = ret;
kembali ret;
}
/ / Relatif Perdana – Algoritma Euclid
/ / GCD dari dua angka-mereka faktor umum adalah ’1 ‘
kekosongan RSA:: relprime ()
{
/ / Mencari ‘e’ & nilai ‘d’
int sirip, ret, ret1, ret2, ch, mantan, dx;
ch = 1; ex = 2; dx = 1;
n1 = PR1 PR2 *;
fin = (PR1-1) * (PR2-1);
/ / Mencari ‘e’ sendiri
x1 = 1; / / untuk pseudo2
sementara (ch)
{
ex = pseudo2 ();
jika (mantan> 1 & & ex <sirip)
{
ret1 = FPB (ex, sirip);
ret2 = FPB (fin, (mantan sirip%));
if (== ret1 1 & & ret2 == 1)
{
e = ex;
ch = 0;
break;
}
}
}
/ / Cout <<"
Relatif Perdana: e Nilai: "<<e;
/ / Mencari ‘d’ saja
/ / De = (1 fin mod) dimana sirip = (PR1-1) * (PR2-1);
ch = 1;
sementara (ch)
{
ret = (e * dx) sirip%;
if (ret == 1)
{
d = dx;
ch = 0;
break;
}
dx = dx +1;
}
/ / Cout <<"
d Nilai: "<<d;
}
int RSA:: FPB (int c, int d)
{
int r;
r = d% c;
sementara (= 0 r!)
{
d = c;
c = r;
r = d% c;
}
kembali c;
}
int RSA:: keygenerate1 (int ptext)
{
/ / Enkripsi
int i, c;
int entext;
c = 0; entext = 1;
decitobin (e); kunci / / publik dengan ‘e’
/ / B [] -> array yang berisi nilai biner dari ‘e’
for (i = len; i> = 0; i -)
{
c = 2 * c;
entext = (entext * entext)% n1; / / 187 -> n1
jika (a [i] == 1)
{
c = c +1;
entext = (entext * ptext)% n1; / / 187 -> n1
}
}
/ / Cout <<"
Dienkripsi ‘c’: "<<c;
kembali entext;
}
int RSA:: keygenerate2 (int ctext)
{
/ / Dekripsi
int i, dntext, c;
dntext = 1;
c = 0;
decitobin (d); Kunci / / Swasta dengan ‘d’
/ / B [] -> array yang berisi nilai biner dari ‘d’
for (i = len; i> = 0; i -)
{
c = 2 * c;
dntext = (dntext * dntext)% n1;
jika (a [i] == 1)
{
c = c +1;
dntext = (dntext * ctext)% n1;
}
}
/ / Cout <<"
Didekripsi ‘c’: = "<<c;
kembali dntext;
}
kekosongan RSA:: decitobin (int x)
{
int k, i = 0;
sementara (x> 0)
{
a [i] = x% 2;
i + +;
x = x / 2;
}
/ / Saat keluar dari atas lingkaran, saya nilai bertambah dengan 1
k = i-1;
len = i-1;
}
int RSA:: mengenkripsi (int num)
{
int ctext, i;
pt = num;
ctext = keygenerate1 (num);
kembali (ctext);
}
int RSA:: mendekripsi (int ctext)
{
int dectext, i;
dectext = keygenerate2 (ctext);
kembali (dectext);
}
/ / Aplikasi File – Aplikasi RSA
/ / Algoritma Rabin Miller & – Test untuk primality
/ / Pseudorandom Nomor Generator Algoritma
/ / Relatif Perdana – Algoritma Euclid
# Include "rh1.h"
# Include
void main ()
{
int i, det, det1, len, k, k1, cnt;
int con = 0, c;
char ch [100], cipher [20], orig [20];
RSA r;
c = 1;
cout <<endl <<endl;
for (i = 0; i <70; i + +)
pengadilan <<’*';
cout <<"
RSA APLIKASI <BR>;
for (i = 0; i <70; i + +)
pengadilan <<’*';
cout <<endl;
r.pseudo1 ();
r.relprime ();
cout <<"
Masukkan String: ";
cnt = 0;
arang chr;
scanf ("% [^
] S ", ch);
len = strlen (ch);
k = 0; k1 = 0;
for (i = 0; i <len; i + +)
{
con = (int) ch [i];
det = r.encrypt (con);
cipher [k] = char (det);
k + +;
det1 = r.decrypt (det);
dgn [k1] = char (det1);
k1 + +;
}
cipher [k] = ‘
[/sourcecode]





0 komentar:
Posting Komentar
Jangan Lupa Komentarnya Yach !!