1. Trang chủ
  2. » Công Nghệ Thông Tin

Nghiên cứu và xây dựng một thuật toán mã hóa thông điệp nhờ kết hợp giữa mật mã chuyển vị và mật mã VIGENERE (Đồ án tốt nghiệp)

70 131 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 70
Dung lượng 5 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nghiên cứu và xây dựng một thuật toán mã hóa thông điệp nhờ kết hợp giữa mật mã chuyển vị và mật mã VIGENERE (Đồ án tốt nghiệp)Nghiên cứu và xây dựng một thuật toán mã hóa thông điệp nhờ kết hợp giữa mật mã chuyển vị và mật mã VIGENERE (Đồ án tốt nghiệp)Nghiên cứu và xây dựng một thuật toán mã hóa thông điệp nhờ kết hợp giữa mật mã chuyển vị và mật mã VIGENERE (Đồ án tốt nghiệp)Nghiên cứu và xây dựng một thuật toán mã hóa thông điệp nhờ kết hợp giữa mật mã chuyển vị và mật mã VIGENERE (Đồ án tốt nghiệp)Nghiên cứu và xây dựng một thuật toán mã hóa thông điệp nhờ kết hợp giữa mật mã chuyển vị và mật mã VIGENERE (Đồ án tốt nghiệp)Nghiên cứu và xây dựng một thuật toán mã hóa thông điệp nhờ kết hợp giữa mật mã chuyển vị và mật mã VIGENERE (Đồ án tốt nghiệp)Nghiên cứu và xây dựng một thuật toán mã hóa thông điệp nhờ kết hợp giữa mật mã chuyển vị và mật mã VIGENERE (Đồ án tốt nghiệp)Nghiên cứu và xây dựng một thuật toán mã hóa thông điệp nhờ kết hợp giữa mật mã chuyển vị và mật mã VIGENERE (Đồ án tốt nghiệp)

Trang 5

PH N M U 1

M T MÃ C N 3

1.1 M u : 3

1.2 Mã d ch chuy n 4

1.3 Mã thay th 6

1.4 Mã Apphin 8

1.5 Mã Vigenere 10

: Mã Vigenere(( P , C , K , E , D) 10

1.5.2 Ví d : Cho Khóa k là t CIPHER , 10

1.6 Mã Hill 12

1.7 Mã chuy n v 14

14

1.7.2 Ví d : 15

m t 18

18

18

g pháp mã hóa : 18

i mã : 19

20

2.2 23

2 23

23

2.2.3 i mã 24

26

27

3.1 S k t h p hai mã chuy n v và mã Vigenere 27

3.1.1 Lý thuy t : 27

Trang 6

3.1.2 Mã hóa 27

3.1.3 Gi i mã 27

Demo 28

3.3 Mã ngu n 30

62

63

64

Trang 7

và có m t ng r t l i v i s t n t i và phát tri n c a các ngành khoa

h c khác Trong m i h th ng tin h c, thông tin luôn là thành ph n nh t

và quan tr ng nh t Chúng ta không ai mà không g p ph i nh ng h p khi máy tính b m t h t nh ng thông tin quan tr ng do nhi u nguyên nhân khác nhau

virus, b ng thi t b , do không bi t s d ng, b p hay xoá

an toàn và b o m t thông tin r ng và ph

ng, công ngh n nay có r t nhi u công c và ph n m m h tr an toàn

là r t an toàn hôm nay có th không còn an toàn n a vào ngày mai N u chúng ta

ng xuyên theo dõi các thông tin b o m t trên Internet, chúng ta có th th y thông tin v nh ng l h ng b o m t c a các h u hành, các ph n m m b o

m t, các d ch v y an toàn và b o m t thông tin là m t trong nh ng thành ph n quan tr ng nh t c c quan tâm trong vi c duy trì và phát tri n

c a h th ng.

Trang 8

M t mã và v an toàn thông tin ?

mã hoá Bên B nh c thông tin mã hoá này th c hi n vi c gi hi u

c a thông tin vì ch có A và B m i có cách gi i mã Th i kì này các thông tin

s d ng trong m t th i gi n khi toán h c phát tri n Các h mã m i

c xây d ng trên các lý thuy t v toán h c hi i M t th h m c

mã hi i Các ng d ng c a các h m t mã c áp d ng trong nhi v c xã h i Giúp gi i qu t hàng lo t các v v an toàn thông tin trên các kênh thông tin không b o m t.

M t mã cung c p m t gi i pháp nh m m c hi n bi n m t thông tin c th d hi u thành m t d ng khác (khó hi u) có quan h ch t ch v i thông

xác nh n t n t i và s xác nh n tính nguyên b n c a thông tin.

t gi i thi u 6 m t mã c n :

Trang 9

M T MÃ C N

1.1 M u :

Mong mu i thông tin m t cách bí m t là m t trong nh ng

i c i xu t hi n t r t s m trong l ch s Vì th l ch s c a vi c

i thông tin m t r t phong phú và bao g m nh ng phát

y tính giai tho i Ngành h c nghiên c u cách th c che d i v i

nh ng không mong mu n g i là m t mã h c ( cryptography)

c truy n trên các kênh thông tin b o m n tho i,m ng truy n

b n ch t nhiên, c th là ta s dùng 26 ch cái trong b n ch cái ti ng Anh.

P là m t t p h u h n các b n rõ.

C là m t t p h u h n các b n mã.

K là m t t p h u h n các khóa.

Trang 10

V i m i k K , có m t hàm l p mã ek E ,sao cho ek: P -> C, và m t hàm gi i mã dk D , dk: C -> P sao cho dk(ek(x)) = x v i m i x P.

Trong th c t ng là b ng ch cái ( ho c t p các dãy ch cái có dài c nh)

Nh v y, b ng ch cái ti ng Anh có th xem là m t vành Z26 v i s t ng ng

k trên.

14 15 16 17 18 19 20 21 22 23 24 25

Trang 12

B2: Th c hi n phép tr v n hi u v i modulo 26, t s có:

T p khoá ph thu c vào Zmv i m là s khoá có th

Trong ti ng Anh t p khoá ch có 26 khoá có th , vi c thám mã có th

Trang 13

Mã thay th có t p h p khoá khá l n - b ng s các hoán v trên b ng ch cái,

t c s các hoán v trên Z 26(hay là 26!)

Vi c duy t toàn b các hoán v thám mã là r t khó, ngay c i v i máy tính Tuy nhiên, ta s th y có nh ng ph ng pháp thám mã khác d dàng

th c hi n, và do mã thay th c ng không th c xem là an toàn

Trang 14

1.4 Mã Apphin

Phép l p mã c cho b i m t hàm Apphin d ng:

e(x) = ax + b mod 26 trong a, b Z26(chú ý: n u a = 1 ta có mã d ch chuy n)

có c phép gi i mã t ng ng, t c cho ph ng trình

ax + b = y mod 26

có nghi m x duy nh t (v i b t k y c), hay nói cách khác hàm Apphin ph i là n ánh Theo m t nh lý s h c, i u ki n c n và là a nguyên t v i 26, t c là (a, 26) = 1.

y (a, 26) ký hi u cho c s chung l n nh t c a a và 26.

Khi (a, 26) = 1 thì có s a-1 Z26sao cho a.a-1 = a-1.a = 1 mod 26, và do , n u:

Trang 16

Mã l y tên c a Blaise de ng vào th k 16 Khác v i các mã

tr c, mã Vigen re không th c hi n trên t ng ký t m t,mà c th c hi n trên

Trang 17

c 2 : C ng l t các s c a b n rõ v i khóa ( l y theo modulo 26) ta

c 2 : Tr l t các s c a b n rõ v i khóa ( l y theo modulo 26) ta

Trang 18

*) Nh n xét :

Mã Vigen re v i m = 1 s tr thành mã D ch chuy n.

T p h p các khoá trong mã Vigen re m i m 1 có t t c là 26mkhoá có

th có V i m = 6, s khoá là 308.915.776, duy t toàn b ch ng y khoá thám mã b ng tính tay thì khó, nh ng v i máy tính thì v n là i u d dàng.

1.6 Mã Hill

trên t ng b m ký t , m i ký t trong b n mã là m t t h p tuy n tính (trên vành

Z26) c a m ký t trong b y, khoá s c cho b i m t ma tr n c p

Trang 19

M t chú ý là phép chia luôn th c hi n c trên t p Z26thì nh t thi t

nh th c c a k : det(k) = (ad bc) ph i có ph n t ngh ch o trên Z26, ngh a là (ad bc) ph i là m t trong các giá tr : 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, ho c

Ví d :

Trang 25

ng h p 1 : n u m = n, ta ti n hành c ng theo th t ng t trái sang ph i.

ng h p 2 : n u m < n , ta s c n thêm khóa: m = m + (n-m)

dài khóa là 6 ( m =6) và ta s i khóa k theo quy t i kí t sang s

Trang 26

c 1: Chuy n b n mã và khóa t ch cái sang s

N dài khóa mà r t nh so v dài b n rõ( m << n ) thì có th thám

c T p h p các khoá trong mã Vigen re v i m 1 có t t c là 26mkhoá có th có Duy t toàn b ch ng y khoá thám mã b ng tính tay thì khó, nh ng v i máy tính thì v n là i u d dàng.

Trang 27

c mã pháp mà Vinegere thì vi c ti p dài khóa( có th dùng phép th Kasiski)

Trang 28

( theo h t gi m d n ) là: TH, HE, IN, ER, AN, RE, ED, ON, ES, ST, EN, AT,

TO, NT, HA, ND, OU, EA, NG, AS, OR, TI, IS, ET, IT, AR, TE, SE, HI và OF

12 b ba thông d ng nh t (theo th t gi m d n ) là: THE, ING, AND, HER, ERE, ENT, THA, NTH, WAS, ETH, FOR và DTH.

mã chuy n v nh m ch ng l i kh n công nh m vào khóa.

V i vi c k t h y ta s t c an toàn b i qua hai l p khóa , vi c

không th

Trang 30

c 4 : Vi t b n rõ vào b ng ma tr n v a l p theo th t t nhiên

c 5 : Nh t các kí t trong ma tr n v a l p theo c t t trên xu ng và t

Trang 32

Vi c thám mã mã chuy n v khi k thám mã bi dài khóa s dò t t

c s khóa có th có => ch riêng mã chuy n v là s không an toàn

Trang 33

h k t n công có th i chi u thám mã d a vào t n s xu t hi

c 3 : B ng ma tr n cu c ta s nh t các ch cái theo th

t t nhiên ra s c b n mã hoàn ch nh do s k t h p c a 2 m t mã t o nên

Trang 34

c 1 : Em s dùng m p b n mã v c nh n ti n hành gi i

mã theo m t mã chuy n v ( th t gi

c b n rõ l n 1, ta s dùng b n rõ 1 này và khóa Vigenere ti n hành gi i mã ti p l n n a ( th t gi

c 3 : B ng ma tr n cu c ta s nh t các ch cái theo th

t b ng ngôn ng l p trình Java,demo v mã hóa và

gi i mã d a vào hai thu t toán trên.

p

Trang 35

Gi i mã : Gi p

Trang 36

Thông tin: Tên tác gi ,tài li u tham kh

Trang 37

public Cipher() {

initComponents();

}

private void initComponents() {

Button_mahoa = new javax.swing.JButton();

Button_giaima = new javax.swing.JButton();

Button_info = new javax.swing.JButton();

Button_exit = new javax.swing.JButton();

jLabel2 = new javax.swing.JLabel();

jLabel1 = new javax.swing.JLabel();

jLabel3 = new javax.swing.JLabel();

jLabel4 = new javax.swing.JLabel();

jLabel5 = new javax.swing.JLabel();

Button_mahoa.addActionListener(new java.awt.event.ActionListener() {

Trang 38

public void actionPerformed(java.awt.event.ActionEvent evt) {

public void actionPerformed(java.awt.event.ActionEvent evt) {

Trang 40

jLabel5.setFont(new java.awt.Font("Times New Roman", 1, 16)); // NOI18N

private void Button_exitActionPerformed(java.awt.event.ActionEvent evt) {

int chon = JOptionPane.showConfirmDialog(this,"B n mu n thoát ??? ", "Thông báo ",

Trang 41

} catch (InstantiationException ex) {

java.util.logging.Logger.getLogger(Cipher.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(Cipher.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (javax.swing.UnsupportedLookAndFeelException ex) {

java.util.logging.Logger.getLogger(Cipher.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

}

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new Cipher().setVisible(true);

Trang 42

});

}

private javax.swing.JButton Button_exit;

private javax.swing.JButton Button_giaima;

private javax.swing.JButton Button_info;

private javax.swing.JButton Button_mahoa;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JLabel jLabel4;

private javax.swing.JLabel jLabel5;

// End of variables declaration

private String chuoi="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

public String getChuoi() {

Trang 43

int[] x = new int[s.length()];

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

char[] chuyen_chuoi = getChuoi().toCharArray();

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

Trang 44

int[] x = new int[banro.length()];

int[] k = new int[banro.length()];

int[] kq = new int[banro.length()];

char[] mang_banro = banro.toCharArray();

// chuyen doi khoa tu String sang int[]

int[] chuyen_khoa = chuyen_khoa(khoa);

Trang 45

char[][] a = new char[sohang][khoa.length()];

char[] mang_daydu = new char[sohang*khoa.length()];

System.arraycopy(mang_banro, 0, mang_daydu, 0, mang_banro.length);

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

for (int j = 0; j < khoa.length(); j++) {

a[i][j] = mang_daydu[i * khoa.length() + j];

}

}

// - ma hoa ma

tran -char[][] b = new char[sohang][khoa.length()];

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

for (int j =0; j < khoa.length(); j++) {

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

for (int j =0; j < khoa.length(); j++) {

Trang 46

// -public static int[] chuyen_khoa(String khoa){

int[] chuyen_khoa = new int[khoa.length()];

// chuyen doi khoa tu String sang int[]

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

// -public static int[] khoa_dao(int[] khoa){

int[] a = new int[khoa.length];

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

a[khoa[i]] = i;

}

return a;

}

private void initComponents() {

jTextField1 = new javax.swing.JTextField();

jLabel3 = new javax.swing.JLabel();

jScrollPane1 = new javax.swing.JScrollPane();

ta_banro = new javax.swing.JTextArea();

jScrollPane2 = new javax.swing.JScrollPane();

ta_banma = new javax.swing.JTextArea();

tf_vigenere = new javax.swing.JTextField();

tf_chuyenvi = new javax.swing.JTextField();

bt_mahoa = new javax.swing.JButton();

bt_xoa = new javax.swing.JButton();

Trang 47

bt_thoat = new javax.swing.JButton();

jLabel1 = new javax.swing.JLabel();

jLabel2 = new javax.swing.JLabel();

jLabel4 = new javax.swing.JLabel();

jLabel5 = new javax.swing.JLabel();

Trang 48

tf_chuyenvi.setFont(new java.awt.Font("Times New Roman", 0, 14

bt_mahoa.setFont(new java.awt.Font("Times New Roman", 1, 14));

Trang 49

jLabel1.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(15, 15, 15)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

Trang 50

.addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

Trang 51

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,

109, Short.MAX_VALUE)

.addComponent(bt_thoat, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE)))

.addComponent(tf_vigenere, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(jLabel1))

.addGap(18, 18, 18)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)

.addGroup(layout.createSequentialGroup()

.addGap(1, 1, 1)

Trang 52

.addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))

Trang 53

String banro = ta_banro.getText();

String khoa1 = tf_vigenere.getText();

String khoa2 = tf_chuyenvi.getText();

String banma1 = mahoa_vigenere(banro, khoa1);

String banma2 = mahoa_chuyenvi(banma1, khoa2);

ta_banma.append(banma2);

} catch (NumberFormatException e) {

JOptionPane.showMessageDialog(null, "D li i", JOptionPane.ERROR_MESSAGE);

private void bt_thoatActionPerformed(java.awt.event.ActionEvent evt) {

int chon = JOptionPane.showConfirmDialog(this,"B n mu n thoát ??? ", "Thông báo ", JOptionPane.YES_NO_OPTION);

if(chon == JOptionPane.YES_OPTION){

dispose();

}

}

Trang 54

public static void main(String args[]) {

} catch (InstantiationException ex) {

java.util.logging.Logger.getLogger(Mahoa.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(Mahoa.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (javax.swing.UnsupportedLookAndFeelException ex) {

java.util.logging.Logger.getLogger(Mahoa.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

Trang 55

}

// Variables declaration - do not modify

private javax.swing.JButton bt_mahoa;

private javax.swing.JButton bt_thoat;

private javax.swing.JButton bt_xoa;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JLabel jLabel4;

private javax.swing.JLabel jLabel5;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JScrollPane jScrollPane2;

private javax.swing.JTextField jTextField1;

private javax.swing.JTextArea ta_banma;

private javax.swing.JTextArea ta_banro;

private javax.swing.JTextField tf_chuyenvi;

private javax.swing.JTextField tf_vigenere;

// End of variables declaration

Trang 56

private void initComponents() {

tf_vigenere = new javax.swing.JTextField();

tf_chuyenvi = new javax.swing.JTextField();

bt_giaima = new javax.swing.JButton();

bt_xoa = new javax.swing.JButton();

bt_thoat = new javax.swing.JButton();

jLabel1 = new javax.swing.JLabel();

jLabel2 = new javax.swing.JLabel();

jScrollPane1 = new javax.swing.JScrollPane();

ta_banma = new javax.swing.JTextArea();

jScrollPane2 = new javax.swing.JScrollPane();

ta_banro = new javax.swing.JTextArea();

jLabel4 = new javax.swing.JLabel();

jLabel5 = new javax.swing.JLabel();

setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

setTitle("Gi i mã thông tin");

setBounds(new java.awt.Rectangle(500, 200, 0, 0));

setResizable(false);

tf_vigenere.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N

tf_chuyenvi.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N

bt_giaima.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N

Trang 58

ta_banma.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,

layout.createSequentialGroup()

.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

Ngày đăng: 25/02/2018, 08:01

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w