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)
, cho em e ! Sinh viên PH N M U M T MÃ C 1.1 M N u : 1.2 Mã d ch chuy n 1.3 Mã thay th 1.4 Mã Apphin 1.5 Mã Vigenere 10 : Mã Vigenere(( P , C , K , E , D) 10 1.5.2 Ví d : Cho Khóa k 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 23 23 2.2.3 i mã 24 26 27 3.1 S k t h p hai mã chuy n v mã Vigenere 27 3.1.1 Lý thuy t : 27 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 PH N M Các h m t mã c U n d ng c a h m i x ng i x ng ch h l p mã ta có th t khóa c khóa gi i mã m t cách d dàng (vì v ng coi chúng m ng th i vi c gi i ta i th c l p mã Các h mã thu c lo i có th i gian l p mã gi i nhanh th h ix l i x ng yêu c u ph i gi bí m t hồn tồn v khóa l p mã N cs d t khóa l t b i i thi Hi n tin h có m t mã hóa nh ng d li u vi c c n thi mã hóa thơng tin: c áp d ng vào h u h ng r t l c cu c s ng i v i s t n t i phát tri n c a ngành khoa h c khác Trong m i h th ng tin h c, thông tin thành ph quan tr ng nh t Chúng ta không mà không g p ph i nh n nh t ng h p máy tính b m t h t nh ng thông tin quan tr ng nhi u nguyên nhân khác virus, b ng thi t b , khơng bi t s d ng, b an tồn b o m t thông tin r thu c vào nhi u y u t ch ng, công ngh p hay xố ng ph i, mơi n có r t nhi u cơng c ph n m m h tr an toàn cho h th ng máy tính Tuy nhiên v n tồn r t ph c t p ch n l a m t h th ng an i b i m t h th r t an tồn hơm có th khơng an tồn n a vào ngày mai N u ng xuyên theo dõi thông tin b o m t Internet, có th th y thông tin v nh ng l h ng b o m t c a h m t, d ch v y an toàn b o m t thông tin m t nh ng thành ph n quan tr ng nh t c c a h th ng u hành, ph n m m b o c quan tâm vi c trì phát tri n M t mã v an tồn thơng tin ? M t hi i Ai c p Khi mà cu c chi n tranh x y gi ch Thông tin c ch (letter), ch s (number) hay lo mã hoá Bên B nh c n i dung M i d ng cg c c thơng tin mã hố th c hi n vi c gi hi u il y ó cb hi c n i dung c a thông tin ch có A B m i có cách gi i mã Th i kì thơng tin cb om tb c i h m t mã n Các h m t mã s m nh c bi t mã Ceazar - mã dich chuy n (Shift Cipher), mã th m s d ng m t th i gi n toán h c phát tri n Các h mã m i c xây d ng lý thuy t v toán h c hi xây d ng d c i M t th h m ph c t p tính tốn, h m mã hi i Các ng d ng c a h m t mã nhi v c xã h i Giúp gi i qu t hàng lo t v c c g i h c áp d ng v an tồn thơng tin 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 tin g c Gi b n rõ b n mã b ov y m t mã ? T i l i t thơng tin ? c a ? : M t mã h c s nghiên c n m t s khía c nh c c liên an toàn, s toàn v n d li u, s xác nh n t n t i s xác nh n tính ngun b n c a thơng tin t gi i thi u m t mã c n: M T MÃ C 1.1 M N u: Mong mu i thơng tin m t cách bí m t m t nh ng ic i xu t hi n t r t s m l ch s Vì th l ch s c a vi c i thông tin m t r t phong phú 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 nh iv i ng không mong mu n g i m t mã h c ( cryptography) M b o v bí m t c a thông tin thông tin c truy n kênh thông tin b o m - i A mu n g n tho i,m ng truy n iBm n b ng ti ng Vi t ( g n c b o m t A ph i l p m n i b n mã cho B A B có m t khóa m t mã chung, v B gi i khác khơng có kênh truy hi - Các h m t mã c Al p bi n c n i dung thông báo mà A g i cho B n th c hi n vi c b o m u dùng m t kháo chung cho vi c l p mã gi i mã, b n rõ b b n ch t nhiên, c th ta s dùng 26 ch b n ch ti ng Anh hi dùng quan ni m toán h M t h m t mã m t b P m t t p h u h n b n rõ C m t t p h u h n b n mã K m t t p h u h n khóa mơ t hình th u ki n V im ik K , có m t hàm l p mã ek hàm gi i mã dk D , dk : C -> P cho dk(ek(x)) = x v i m i x Trong th c t dài c E ,sao cho ek : P -> C, m t P ng b ng ch ( ho c t p dãy ch có nh) N u b n rõ (m t xâu ch cái): x = x1x2x3 n (xi P ), khoá k y = y1y2y3 n (yi C) i K b n mã s là: = ek(xi c b n mã y, bi t khoá k, s tìm c b n rõ x, xi = dk(yi) ng ch dùng s 0, , 24, 25 dùng phép toán s h c theo modulo 26 bi di n t phép i b ng ch A B C D E F G H I J K L 10 11 12 13 O P Q R S T U V W X M N Y Z 14 15 16 17 18 19 20 21 22 23 24 25 1.2 Mã d ch chuy n Kí hi u Z m t p s nguyên t vành s nguyên t n (m-1), ký hi u c ng dùng cho n (m-1) v i phép c ng nhân v i modulo m Nh v y, b ng ch ti ng Anh có th xem m t vành Z26 v i s t k ng ng } 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 bt_giaima.setForeground(new java.awt.Color(0, 0, 204)); bt_giaima.setText("Gi i mã"); bt_giaima.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bt_giaimaActionPerformed(evt); } }); bt_xoa.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N bt_xoa.setForeground(new java.awt.Color(0, 0, 204)); bt_xoa.setText("Xóa"); bt_xoa.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bt_xoaActionPerformed(evt); } }); bt_thoat.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N bt_thoat.setForeground(new java.awt.Color(0, 0, 204)); bt_thoat.setText("Thoát"); bt_thoat.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bt_thoatActionPerformed(evt); } }); jLabel1.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jLabel1.setForeground(new java.awt.Color(0, 0, 255)); jLabel1.setText("Khóa Vigenere"); jLabel2.setFont(new java.awt.Font("Times New Roman", 1, 18)); // NOI18N jLabel2.setForeground(new java.awt.Color(0, 0, 255)); jLabel2.setText("B n mã"); ta_banma.setColumns(20); ta_banma.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N ta_banma.setRows(5); jScrollPane1.setViewportView(ta_banma); ta_banro.setColumns(20); ta_banro.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N ta_banro.setForeground(new java.awt.Color(204, 0, 0)); ta_banro.setRows(5); jScrollPane2.setViewportView(ta_banro); jLabel4.setFont(new java.awt.Font("Times New Roman", 1, 18)); // NOI18N jLabel4.setForeground(new java.awt.Color(0, 0, 255)); jLabel4.setText("B n rõ"); jLabel5.setFont(new java.awt.Font("Times New Roman", 1, 14)); // NOI18N jLabel5.setForeground(new java.awt.Color(0, 0, 255)); jLabel5.setText("Khóa chuy n v "); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) addGroup(layout.createSequentialGroup() addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD ING) 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.UNRELAT ED) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 340, javax.swing.GroupLayout.PREFERRED_SIZE)) addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() addContainerGap() addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELAT ED) addComponent(tf_vigenere, javax.swing.GroupLayout.PREFERRED_SIZE, 340, javax.swing.GroupLayout.PREFERRED_SIZE)) addGroup(layout.createSequentialGroup() addContainerGap() addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELAT ED) addComponent(tf_chuyenvi, 340, Short.MAX_VALUE)) javax.swing.GroupLayout.DEFAULT_SIZE, addGroup(layout.createSequentialGroup() addGap(18, 18, 18) addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.L EADING) addGroup(layout.createSequentialGroup() addComponent(bt_giaima) addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELA TED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) addComponent(bt_xoa, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE) addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELA TED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(bt_thoat, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE)) addGroup(layout.createSequentialGroup() addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE) addGap(18, 18, 18) addComponent(jScrollPane2))))) addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) addGroup(layout.createSequentialGroup() addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD ING) addGroup(layout.createSequentialGroup() addContainerGap() addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)) addGroup(layout.createSequentialGroup() addGap(50, 50, 50) addComponent(jLabel2))) addGap(18, 18, 18) addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASE LINE) addComponent(tf_vigenere, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) addComponent(jLabel1)) addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, Short.MAX_VALUE) 15, .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD ING, false) addGroup(layout.createSequentialGroup() addGap(1, 1, 1) addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) addComponent(tf_chuyenvi, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) addGap(28, 28, 28) addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD ING) addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) addComponent(bt_giaima) addComponent(bt_thoat)) addComponent(bt_xoa, javax.swing.GroupLayout.Alignment.TRAILING)) addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEAD ING) addGroup(layout.createSequentialGroup() addGap(18, 18, 18) addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)) addGroup(layout.createSequentialGroup() addGap(52, 52, 52) addComponent(jLabel4))) addGap(57, 57, 57)) ); pack(); }// private String chuoi="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; public String getChuoi() { return chuoi; } public void setChuoi(String chuoi) { this.chuoi = chuoi; } // -public int[] mang_chiso(String s){ char[] s_s = s.toCharArray(); int[] x = new int[s.length()]; for (int i = 0; i < s.length(); i++) { x[i] = getChuoi().indexOf(s_s[i]); } return x; } // -public String chiso_chuoi(int[] a){ String s = ""; char[] chuyen_chuoi = getChuoi().toCharArray(); for (int i = 0; i < a.length; i++) { s += chuyen_chuoi[a[i]]; } return s; } // public String giaima_vigenere(String banma,String khoa){ banma = banma.toUpperCase(); khoa = khoa.toUpperCase(); String x=""; int[] y = new int[banma.length()]; int[] k = new int[banma.length()]; int[] kq = new int[banma.length()]; y = mang_chiso(banma); k = mang_chiso(khoa); int i,j; for(i=0,j=0;i