Jumat, 27 Januari 2012


[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]

Tagged:

0 komentar:

Posting Komentar

Jangan Lupa Komentarnya Yach !!