Program Decrypt dan Encrypt Password Sederhana Linked List C++
wellcome back
Oke langsung aja kalo kalian lagi nyari referensi buat tugas yang sejenis, mungkin ini bisa jadi solusi.
1. Buat program untuk enkripsi dan dekripsi password yang memanfaatkan Linked List, dengan spesifikasi :
· Panjang password minimal 6 digit.
· Isi password terserah dari user dan password diinputkan terlebih dahulu sebelumnya (penambahan data di belakang).
· Enkripsi dilakukan dengan memindahkan 3 node terakhir, menjadi node terdepan. Kemudian sisipkan 1 karakter baru sebagai kunci setelah node ketiga dari yang dipindahkan tersebut.
· Ilustrasi
· Lakukan juga proses dekripsi-nya.
Berikan juga fitur untuk menampilkan password
a. Penjelasan Program
1) Deklarasi struct linked list
//Deklarasi
struct dLinkedList {
dLinkedList* prev;
char data;
dLinkedList* next;
};
dLinkedList* head;
dLinkedList* tail;
Pada program ini menggunakan double linked list dengan tipe data char.
2) Tambah tengah
void tambahTengah(char word, int value) {
dLinkedList *baru, *bantu, *bantu2;
baru = new dLinkedList; //membuat node baru
baru->data = word; //menambah data ke node baru
baru->next = NULL;
baru->prev = NULL;
bantu = head;
for(int i = 1; i < value-1; i++) {
if(bantu != NULL) {
bantu = bantu->next; //menggeser data sesuai value
}
}
if(bantu != NULL) {
bantu2 = bantu->next; // menghubungkan ke node setelah yang
dicari
baru->next = bantu2; // menghubungkan node baru
bantu2->prev = baru;
bantu->next = baru; // menghubungkan ke node sebelum yang
dicari
baru->prev = bantu;
}
}
Tambah tengah pada program ini digunakan untuk menambahkan karakter setelah huruf ke-3.
3) Tambah belakang
void tambahBelakang (char datamasuk) {
if(kosong()) { //jika data kosong
dLinkedList* simpul;
simpul = new dLinkedList; //membuat node baru
simpul->data = datamasuk; //menambah data ke node simpul
simpul->prev=NULL;
simpul->next=NULL;
head = simpul;
tail = simpul;
}
else {
dLinkedList* simpul;
simpul = new dLinkedList; //membuat node baru
simpul->data =datamasuk;
simpul->prev = tail;
tail->next = simpul;
tail = simpul;
}
}
Tambah belakang digunakan untuk menambahkan setiap karakter ke dalam linked list melalui perulangan for,
for(int i=0; i<strlen(kata); i++) {
tambahBelakang(kata[i]); ;
count++;
}
Dengan strlen akan menghitung jumlah karakter kemudian tambah belakang akan menambahkan karakter tersebut secara urut.
4) Rotasi list
void rotateList(int n) {
dLinkedList* bantu = head;
if(n == 0 || n >= outOf())
return;
else {
for(int i = 1; i < n; i++)
bantu = bantu->next;
tail->next = head;
head = bantu->next;
head->prev = NULL;
tail = bantu;
tail->next = NULL;
}
}
Rotate list digunakan untuk memindahkan 3 node terakhir, menjadi node terdepan.
5) Hapus tengah
void hapusTengah(int value) {
dLinkedList *bantu, *bantu2, *hapus;
hapus=head;
for(int i = 1; i < value; i++) {
if(bantu != NULL) {
hapus = hapus->next; //menggeser sesuai value
}
}
if(bantu != NULL) {
bantu2 = hapus->next; // mengkaitkan node sebelum
dan sesudahnya
bantu = hapus->prev;
bantu->next = bantu2;
bantu2->prev = bantu;
delete hapus;
hapus = hapus->next;
}
else {
cout<<"\nNode sebelumnya adalah NULL";
}
}
Hapus tengah di sini hanya digunakan untuk menghapus karakter yang ada pada data. Jika user memilih deskripsi. Hapus tengah akan menghapus data ke 4 pada linked list, dimana data ke 4 tersebut adalah karakter.
6) Enkripsi & Deskripsi
case 1:
cout<<"Data sebelum dienkripsi: "<<kata<<endl;
srand(time(0));
rotateList(3);
tambahTengah(karakter[rand()%8],4);
cout<<"Data setelah dienkripsi: ";tampil();
break;
case 2:
hapusTengah(4);
rotateList(count-4);
cout<<"Data setelah dideskripsi: ";tampil();
break;
Pada enkripsi setelah user memasukkan kata maka program akan memasukkan kata tersebut ke dalam linked list kemudian merotasi node 1-3 ke node terakhir. Program akan memilih karakter secara random untuk dimasukkan ke dalam node ke-4. Baru kemudian data setelah dienkripsi bisa ditampilkan.
Pada Deskripsi user harus memasukkan password sesuai pola pada enkripsi, kemudian program akan menghapus karakter pada node ke 4 dan merotasi lagi menjadi ke bentuk semula.
c. Screenshoot
🧐🧐
BalasHapus