• Tidak ada hasil yang ditemukan

Implementasi Algoritma Rijndael Dan Rsa Pada Pengamanan Data Teks

N/A
N/A
Protected

Academic year: 2017

Membagikan "Implementasi Algoritma Rijndael Dan Rsa Pada Pengamanan Data Teks"

Copied!
19
0
0

Teks penuh

(1)

Listing Tampilan Menu Utama

using System;

using System.Collections.Generic; using System.ComponentModel; using System.Data;

using System.Drawing; using System.Linq; using System.Text;

using System.Windows.Forms; using System.Numerics;

namespace WindowsFormsApplication1 {

public partial class FormUtama : Form {

public FormUtama() {

InitializeComponent(); }

private void enkripsiToolStripMenuItem_Click(object sender, EventArgs e) {

Enkripsi frm = new Enkripsi(); //frm.MdiParent = this;

frm.Show(); }

private void dekripsiToolStripMenuItem_Click(object sender, EventArgs e) {

Dekripsi frm = new Dekripsi(); //frm.MdiParent = this;

frm.Show(); }

private void FormUtama_Load(object sender, EventArgs e) {

//byte[] asli = new byte[16] { 0x32, 0x88, 0x31, 0xe0, 0x43, 0x5a, 0x31, 0x37, 0xf6, 0x30, 0x98, 0x07, 0xa8, 0x8d, 0xa2, 0x34 };

//byte[] key = new byte[16] { 0x2b, 0x28, 0xab, 0x09, 0x7e, 0xae, 0xf7, 0xcf, 0x15, 0xd2, 0x15, 0x4f, 0x16, 0xa6, 0x88, 0x3c };

//string ss = "";

//for (int i = 0; i < 16; i++) //{

// ss += asli[i].ToString("x2") + " "; //}

//Console.WriteLine(ss);

//Rijndael rij = new Rijndael(key); //byte[] cipher = rij.enkripsi(asli); //byte[] decipher = rij.dekripsi(cipher); //string s = "";

//s = "";

//for (int i = 0; i < asli.Length; i++) //{

// s += asli[i].ToString("x2") + " "; //}

//Console.WriteLine("plain teks = " + s); //s = "";

//for (int i = 0; i < cipher.Length; i++) //{

(2)

//}

//Console.WriteLine("cipher teks = " + s); //s = "";

//for (int i = 0; i < 16; i++) //{

// s += decipher[i].ToString("x2") + " "; //}

//Console.WriteLine("decipher teks = " + s); }

private void exitToolStripMenuItem_Click(object sender, EventArgs e) {

this.Close(); }

private void label1_Click(object sender, EventArgs e) {

}

private void aboutToolStripMenuItem_Click(object sender, EventArgs e) {

About frm = new About(); //frm.MdiParent = this; frm.Show();

(3)

ListingTampilan Proses Enkripsi

using System;

using System.Collections.Generic; using System.ComponentModel; using System.Data;

using System.Drawing; using System.Linq; using System.Text;

using System.Windows.Forms; using System.Numerics; using System.IO;

namespace WindowsFormsApplication1 {

public partial class Enkripsi : Form {

private BigInteger E, n, d; private Rijndael rij; private RSA rsa;

private String lokasiFileBuka = ""; private String statusSimpan = ""; public Enkripsi()

{

InitializeComponent(); }

private void Form1_Load(object sender, EventArgs e) {

}

private void button1_Click(object sender, EventArgs e) {

if (txtTeks.Text != "" || txtKey.Text != "") {

int panjangEnkripsi = 0; int penanda = 0;

panjangEnkripsi = (int)Math.Ceiling(((double)txtTeks.Text.Length / 16)); byte[] asli = new byte[16];

byte[] key = Encoding.ASCII.GetBytes(txtKey.Text.PadRight(16, ' '));

rij = new Rijndael(key);

for (int i = 0; i < panjangEnkripsi; i++) {

string teksTemp = "";

if (i == panjangEnkripsi - 1) {

int berapaBykPotong = txtTeks.Text.Length - penanda; teksTemp = txtTeks.Text.Substring(penanda,

berapaBykPotong);

teksTemp = teksTemp.PadRight(16, ' '); }

else

{

teksTemp = txtTeks.Text.Substring(penanda, 16); }

(4)

for (int j = 0; j < cipher.Length; j++) {

txtTeksEnk.Text += (char)cipher[j]; }

penanda += 16;

}

} }

private void btnEnkripKey_Click(object sender, EventArgs e) {

if (txtKey.Text != "") {

rsa = new RSA();

rsa.enkripsi(txtKey.Text); E = rsa.e; n = rsa.n; d = rsa.d;

txtD.Text = d.ToString(); txtE.Text = E.ToString(); txtN1.Text = n.ToString(); txtN2.Text = n.ToString(); txtKeyEnk.Text = rsa.cipher; }

}

private void button1_Click_1(object sender, EventArgs e) {

openFileDialog1.Title = "Buka File Text.";

openFileDialog1.Filter = "Txt File (*.txt)|*.txt"; openFileDialog1.RestoreDirectory = true;

openFileDialog1.FileName = ""; openFileDialog1.ShowDialog();

}

private void openFileDialog1_FileOk(object sender, CancelEventArgs e) {

System.IO.Stream strm; strm = openFileDialog1.OpenFile();

lokasiFileBuka = openFileDialog1.FileName.ToString();

System.IO.FileStream inp = System.IO.File.OpenRead(lokasiFileBuka); System.IO.StreamReader input = new System.IO.StreamReader(inp); try

{

while (input.Peek() > -1) {

string teks = input.ReadToEnd();

txtTeks.Text = teks; }

} finally { input.Close(); } if (strm != null) { strm.Close();

(5)

}

private void btnSimpan_Click(object sender, EventArgs e) {

saveFileDialog1.Title = "Simpan File Teks TerEnkripsi."; saveFileDialog1.Filter = "Txt File (*.txt)|*.txt"; saveFileDialog1.RestoreDirectory = true;

saveFileDialog1.FileName = ""; statusSimpan = "rijndael";

saveFileDialog1.ShowDialog(); }

private void saveFileDialog1_FileOk(object sender, CancelEventArgs e) {

if (statusSimpan == "rijndael") {

StringBuilder sb = new StringBuilder(); sb.Append(txtTeksEnk.Text);

using (StreamWriter outfile = new StreamWriter(saveFileDialog1.FileName, false))

{

outfile.Write(sb.ToString()); }

MessageBox.Show("Berhasil!"); }

else if (statusSimpan == "rsa") {

String teksYangInginDisimpan = "";

teksYangInginDisimpan += txtKeyEnk.Text + Environment.NewLine; teksYangInginDisimpan += d.ToString() + Environment.NewLine; teksYangInginDisimpan += n.ToString();

StringBuilder sb = new StringBuilder(); sb.Append(teksYangInginDisimpan);

using (StreamWriter outfile = new StreamWriter(saveFileDialog1.FileName, false))

{

outfile.Write(sb.ToString()); }

MessageBox.Show("Berhasil!"); }

}

private void button2_Click(object sender, EventArgs e) {

saveFileDialog1.Title = "Simpan File Key TerEnkripsi, dan kunci publik RSA."; saveFileDialog1.Filter = "Txt File (*.txt)|*.txt";

saveFileDialog1.RestoreDirectory = true; saveFileDialog1.FileName = "";

statusSimpan = "rsa";

(6)

private void button3_Click(object sender, EventArgs e) {

txtD.Clear(); txtE.Clear(); txtKey.Clear(); txtKeyEnk.Clear(); txtTeks.Clear(); txtTeksEnk.Clear(); txtN1.Clear(); txtN2.Clear(); }

private void button4_Click(object sender, EventArgs e) {

this.Close(); } } }

Listing Tampilan Dekripsi

using System;

using System.Collections.Generic; using System.ComponentModel; using System.Data;

using System.Drawing; using System.Linq; using System.Text;

using System.Windows.Forms; using System.Numerics;

namespace WindowsFormsApplication1 {

public partial class Dekripsi : Form {

private RSA rsa; private Rijndael rij;

private String statusBukaFile = ""; public Dekripsi()

{

InitializeComponent(); }

private void button2_Click(object sender, EventArgs e) {

}

private void Dekripsi_Load(object sender, EventArgs e) {

(7)

private void btnEnkripKey_Click(object sender, EventArgs e) {

if (txtKeyEnk.Text != "" || txtD.Text != "" || txtN2.Text != "") {

rsa = new RSA();

rsa.d = (BigInteger)Convert.ToInt64(txtD.Text); rsa.n = (BigInteger)Convert.ToInt64(txtN2.Text); rsa.dekripsi(txtKeyEnk.Text);

txtKey.Text = rsa.decipher; }

}

private void btnEnkripTeks_Click(object sender, EventArgs e) {

if (txtKey.Text != "" || txtTeksEnk.Text != "") {

int panjangEnkripsi = 0; int penanda = 0;

panjangEnkripsi = (int)Math.Ceiling(((double)txtTeksEnk.Text.Length / 16)); byte[] cipher = new byte[16];

byte[] key = Encoding.ASCII.GetBytes(txtKey.Text.PadRight(16, ' '));

rij = new Rijndael(key);

for (int i = 0; i < panjangEnkripsi; i++) {

int len = txtTeksEnk.Text.Length;

string teksTemp = txtTeksEnk.Text.Substring(penanda, 16); int z = 0;

foreach (char c in teksTemp) {

cipher[z] = (byte)System.Convert.ToInt32(c); z++;

}

byte[] decipher = rij.dekripsi(cipher); for (int j = 0; j < decipher.Length; j++) {

txtTeks.Text += (char)decipher[j]; }

penanda += 16; }

//byte[] cipher = new byte[txtTeksEnk.Text.Length];

//byte[] key = Encoding.ASCII.GetBytes(txtKey.Text.PadRight(16, ' '));

//rij = new Rijndael(key); //int z = 0;

//foreach (char c in txtTeksEnk.Text) //{

// cipher[z] = (byte)System.Convert.ToInt32(c); // z++;

//}

//byte[] decipher = rij.dekripsi(cipher);

//for (int i = 0; i < decipher.Length; i++) //{

// txtTeks.Text += (char)decipher[i]; //}

} }

(8)

{

openFileDialog1.Title = "Buka File Text TerEnkripsi."; openFileDialog1.Filter = "Txt File (*.txt)|*.txt"; openFileDialog1.RestoreDirectory = true;

openFileDialog1.FileName = ""; statusBukaFile = "rijndael";

openFileDialog1.ShowDialog(); }

private void button2_Click_1(object sender, EventArgs e) {

openFileDialog1.Title = "Buka File Text TerEnkripsi."; openFileDialog1.Filter = "Txt File (*.txt)|*.txt"; openFileDialog1.RestoreDirectory = true;

openFileDialog1.FileName = ""; statusBukaFile = "rsa";

openFileDialog1.ShowDialog(); }

private void openFileDialog1_FileOk(object sender, CancelEventArgs e) {

if (statusBukaFile == "rijndael") {

System.IO.Stream strm; strm = openFileDialog1.OpenFile();

System.IO.FileStream inp =

System.IO.File.OpenRead(openFileDialog1.FileName.ToString());

System.IO.StreamReader input = new System.IO.StreamReader(inp); try

{

while (input.Peek() > -1) {

string teks = input.ReadToEnd();

txtTeksEnk.Text = teks; }

} finally

{ input.Close(); } if (strm != null) { strm.Close();

} }

else if (statusBukaFile == "rsa") {

System.IO.Stream strm; strm = openFileDialog1.OpenFile();

System.IO.FileStream inp =

System.IO.File.OpenRead(openFileDialog1.FileName.ToString()); System.IO.StreamReader input = new System.IO.StreamReader(inp); int indeks = 0;

try

{

while (input.Peek() > -1) {

string teks = input.ReadLine(); if (indeks == 0)

(9)

txtKeyEnk.Text = teks; }

else if (indeks == 1) {

txtD.Text = teks; }

else if (indeks == 2) {

txtN2.Text = teks; }

indeks++;

} } finally

{ input.Close(); } if (strm != null) { strm.Close();

} } }

private void groupBox2_Enter(object sender, EventArgs e) {

}

private void button3_Click(object sender, EventArgs e) {

(10)

ListingAlgoritma Rijndael

using System;

using System.Collections.Generic; using System.Linq;

using System.Text;

namespace WindowsFormsApplication1 {

class Rijndael {

private byte[] key; private byte[,] Sbox; private byte[,] iSbox; private byte[,,] w; private byte[,] Rcon; private byte[,] State; public Rijndael(byte[] key) {

this.key = new byte[16]; key.CopyTo(this.key, 0);

buatSbox(); buatInvSbox(); buatRcon(); keyExpansion(); }

public byte[] enkripsi(byte[] teks) {

byte[] hasil = new byte[16];

this.State = new byte[4, 4]; for (int i = 0; i < 16; i++)

{

this.State[i / 4, i % 4] = teks[i]; }

addRoundKey(0);

for (int putaran = 1; putaran < 10; putaran++) {

subBytes(); shiftRows(); mixCollumns();

addRoundKey(putaran); }

subBytes(); shiftRows(); addRoundKey(10);

for (int i = 0; i < 16; i++) {

hasil[i] = this.State[i / 4, i % 4]; }

return hasil; }

(11)

{

byte[] hasil = new byte[16];

this.State = new byte[4, 4]; for (int i = 0; i < 16; i++)

{

this.State[i / 4, i % 4] = cipher[i]; }

addRoundKey(10);

for (int putaran = 9; putaran >= 1; putaran--) {

invShiftRows(); invSubBytes();

addRoundKey(putaran); invMixCollumns(); }

invShiftRows(); invSubBytes(); addRoundKey(0);

for (int i = 0; i < 16; i++) {

hasil[i] = this.State[i / 4, i % 4]; }

return hasil; }

public void addRoundKey(int putaran) {

for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

this.State[i, j] = (byte)((int)this.State[i, j] ^ (int)this.w[putaran, i, j]);

} } }

private void subBytes() {

for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

this.State[i, j] = this.Sbox[(this.State[i, j] >> 4), (this.State[i, j] & 0x0f)];

} } }

private void invSubBytes() {

for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

this.State[i, j] = this.iSbox[(this.State[i, j] >> 4), (this.State[i, j] & 0x0f)];

(12)

} }

private void shiftRows() {

byte[,] temp = new byte[4, 4]; for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

temp[i, j] = this.State[i, j]; }

}

for (int i = 1; i < 4; i++) {

for (int j = 0; j < 4; j++) {

this.State[i, j] = temp[i, ((i + j) % 4)]; }

} }

private void invShiftRows() {

byte[,] temp = new byte[4, 4]; for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

temp[i, j] = this.State[i, j]; }

}

for (int i = 1; i < 4; i++) {

for (int j = 0; j < 4; j++) {

this.State[i, ((i + j) % 4)] = temp[i, j]; }

} }

private void mixCollumns() {

byte[,] temp = new byte[4, 4]; for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

temp[i, j] = this.State[i, j]; }

}

for (int i = 0; i < 4; i++) {

this.State[0, i] = (byte) ((int)gfmultby02(temp[0, i]) ^ (int)gfmultby03(temp[1, i]) ^ (int)gfmultby01(temp[2, i]) ^ (int)gfmultby01(temp[3, i]));

this.State[1, i] = (byte)

((int)gfmultby01(temp[0, i]) ^ (int)gfmultby02(temp[1, i]) ^ (int)gfmultby03(temp[2, i]) ^ (int)gfmultby01(temp[3, i]));

(13)

((int)gfmultby01(temp[0, i]) ^ (int)gfmultby01(temp[1, i]) ^ (int)gfmultby02(temp[2, i]) ^ (int)gfmultby03(temp[3, i]));

this.State[3, i] = (byte)

((int)gfmultby03(temp[0, i]) ^ (int)gfmultby01(temp[1, i]) ^ (int)gfmultby01(temp[2, i]) ^ (int)gfmultby02(temp[3, i]));

} }

private void invMixCollumns() {

byte[,] temp = new byte[4, 4]; for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

temp[i, j] = this.State[i, j]; }

}

for (int i = 0; i < 4; i++) {

this.State[0, i] = (byte)

((int)gfmultby0e(temp[0, i]) ^ (int)gfmultby0b(temp[1, i]) ^ (int)gfmultby0d(temp[2, i]) ^ (int)gfmultby09(temp[3, i]));

this.State[1, i] = (byte)

((int)gfmultby09(temp[0, i]) ^ (int)gfmultby0e(temp[1, i]) ^ (int)gfmultby0b(temp[2, i]) ^ (int)gfmultby0d(temp[3, i]));

this.State[2, i] = (byte)

((int)gfmultby0d(temp[0, i]) ^ (int)gfmultby09(temp[1, i]) ^ (int)gfmultby0e(temp[2, i]) ^ (int)gfmultby0b(temp[3, i]));

this.State[3, i] = (byte)

((int)gfmultby0b(temp[0, i]) ^ (int)gfmultby0d(temp[1, i]) ^ (int)gfmultby09(temp[2, i]) ^ (int)gfmultby0e(temp[3, i]));

} }

private static byte gfmultby01(byte b) {

return b; }

private static byte gfmultby02(byte b) {

if (b < 0x80)

return (byte)(int)(b << 1); else

return (byte)((int)(b << 1) ^ (int)(0x1b)); }

private static byte gfmultby03(byte b) {

return (byte)((int)gfmultby02(b) ^ (int)b); }

private static byte gfmultby09(byte b) {

return (byte)((int)gfmultby02(gfmultby02(gfmultby02(b))) ^ (int)b);

}

(14)

{

return (byte)((int)gfmultby02(gfmultby02(gfmultby02(b))) ^ (int)gfmultby02(b) ^

(int)b); }

private static byte gfmultby0d(byte b) {

return (byte)((int)gfmultby02(gfmultby02(gfmultby02(b))) ^ (int)gfmultby02(gfmultby02(b)) ^ (int)(b));

}

private static byte gfmultby0e(byte b) {

return (byte)((int)gfmultby02(gfmultby02(gfmultby02(b))) ^ (int)gfmultby02(gfmultby02(b)) ^ (int)gfmultby02(b));

}

private void buatSbox() {

this.Sbox = new byte[16, 16] {

/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */

/*0*/ {0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76},

/*1*/ {0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0},

/*2*/ {0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15},

/*3*/ {0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75},

/*4*/ {0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84},

/*5*/ {0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf},

/*6*/ {0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8},

/*7*/ {0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2},

/*8*/ {0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73},

/*9*/ {0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb},

/*a*/ {0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79},

/*b*/ {0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08},

/*c*/ {0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a},

/*d*/ {0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e},

/*e*/ {0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf},

/*f*/ {0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16} };

}

(15)

{

this.iSbox = new byte[16, 16] {

/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */

/*0*/ {0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb},

/*1*/ {0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb},

/*2*/ {0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e},

/*3*/ {0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25},

/*4*/ {0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92},

/*5*/ {0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84},

/*6*/ {0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06},

/*7*/ {0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b},

/*8*/ {0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73},

/*9*/ {0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e},

/*a*/ {0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b},

/*b*/ {0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4},

/*c*/ {0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f},

/*d*/ {0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef},

/*e*/ {0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61},

/*f*/ {0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d} };

}

private void buatRcon() {

this.Rcon = new byte[10, 4] {{0x01, 0x00, 0x00, 0x00}, {0x02, 0x00, 0x00, 0x00}, {0x04, 0x00, 0x00, 0x00}, {0x08, 0x00, 0x00, 0x00}, {0x10, 0x00, 0x00, 0x00}, {0x20, 0x00, 0x00, 0x00}, {0x40, 0x00, 0x00, 0x00}, {0x80, 0x00, 0x00, 0x00}, {0x1b, 0x00, 0x00, 0x00}, {0x36, 0x00, 0x00, 0x00} }; }

(16)

{

byte[] result = new byte[4];

result[0] = this.Sbox[word[0] >> 4, word[0] & 0x0f]; result[1] = this.Sbox[word[1] >> 4, word[1] & 0x0f];

result[2] = this.Sbox[word[2] >> 4, word[2] & 0x0f]; result[3] = this.Sbox[word[3] >> 4, word[3] & 0x0f]; return result;

}

private byte[] rotWord(byte[] word) {

byte[] result = new byte[4]; result[0] = word[1];

result[1] = word[2]; result[2] = word[3]; result[3] = word[0]; return result; }

private void keyExpansion() {

this.w = new byte[11, 4, 4]; int indeks = 0;

for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

w[0, i, j] = key[indeks]; indeks++;

} } byte[] temp = new byte[4];

for (int putaran = 1; putaran < 11; putaran++) {

for (int i = 0; i < 4; i++) {

temp[i] = w[putaran - 1, i, 3]; }

temp = rotWord(temp); temp = subWord(temp);

for (int i = 0; i < 4; i++) {

w[putaran, i, 0] = (byte)((int)w[putaran - 1, i, 0] ^ (int)temp[i] ^ (int)Rcon[putaran-1, i]);

}

for (int j = 1; j < 4; j++) {

for (int i = 0; i < 4; i++) {

w[putaran, i, j] = (byte)((int)w[putaran - 1, i, j] ^ (int)w[putaran, i, j - 1]);

} } } } }

(17)

Listing Algoritma RSA

using System;

using System.Collections.Generic; using System.Linq;

using System.Text; using System.Numerics;

namespace WindowsFormsApplication1 {

class RSA {

public BigInteger e, n, d; public string cipher, decipher;

static Random random = new Random(DateTime.Now.Millisecond); public double waktuEnkripsi;

static BigInteger GenerateLargePrime(int length) {

Primality primality = new Primality(); string numbers = "";

for (int i = 0; i < length; i++) {

numbers += random.Next(0, 10); }

BigInteger number = BigInteger.Parse(numbers);

if (primality.IsPrimePseudo(number)) {

return number; } else

{

return GenerateLargePrime(length); }

}

public static BigInteger GCD(BigInteger m, BigInteger n) {

BigInteger r = n % m; while (r != 0)

{

r = m % n; m = n; n = r;

}

(18)

public static BigInteger nilaiD(BigInteger ex, BigInteger totien) {

BigInteger d = 0; BigInteger temp_d;

for (int k = 2; ; k++) {

d = (totien * k + 1) / ex; temp_d = (totien * k + 1) % ex; if (temp_d == 0)

{ break;

} }

return d; }

public void enkripsi(string teks) {

DateTime mulai = DateTime.Now; TimeSpan selang;

BigInteger p, q, Ex; while (true)

{

p = GenerateLargePrime(128); q = GenerateLargePrime(128);

if (p.ToString().Length == q.ToString().Length && p < q) {

break;

} }

n = BigInteger.Multiply(p, q);

BigInteger totien = BigInteger.Multiply((p - 1), (q - 1)); Ex = 0;

for (BigInteger i = 2; i <= totien; i++) {

if (GCD(totien, i) == 1) {

Ex = i; break;

} }

d = nilaiD(Ex, totien); e = Ex;

foreach (char c in teks) {

BigInteger a = BigInteger.ModPow(c, e, n); cipher += a.ToString() + " ";

}

(19)

public void dekripsi(string teks) {

int i = 0; string s = ""; decipher = "";

while (i < teks.Length) {

if (teks.Substring(i, 1) != " ") {

s += teks.Substring(i, 1); }

else

{

BigInteger eS = BigInteger.Parse(s); BigInteger eD = (BigInteger)d; BigInteger eN = (BigInteger)n;

BigInteger a = BigInteger.ModPow(eS, eD, eN); if (a > 256)

a = a % 256; decipher += (char)a;

s = ""; }

i++;

Referensi

Dokumen terkait

Oleh karena itu penulis membuat situs Sekolah Menengah Umum 113 yang dibangun dengan menggunakan kombinasi bahasa pemrograman yaitu PHP, JavaScript, HTML, serta XML yang di dukung

Specifically, and in contrast to previous findings, we demon- strate that (1) product durability, trialability, and observabil- ity can each affect elasticities; (2) increased

48 ASRM ASURANSI RAMAYANA Tbk BSRE1 - BSR INDONESIA PT... BSRE1 - BSR

Variation linking models the ten- dency of individuals to associate with others based on occupational rela- tions; acquaintance relation forma- tion occurs on the basis of individual

Setiap Pemegang saham public DVLA yang secara tegas memberikan suara tidak setuju atas rencana Penggabungan Usaha pada saat RUPSLB DVLA dan bermaksud untuk

persentase tertinggi konsepsi siswa yang benar pada saat post-test terdapat pada konsep hubungan antara luas penampang dengan tekanan hirostatis, yaitu sebesar 96,77

[r]

Ditemukan bahwa kemampuan menafsirkan grafik kinematika siswa sebesar 19,09 % (tergolong rendah). Beberapa bentuk kesalahan penafsiran grafik kinematika adalah: a) pada