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 5PH 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 63.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 7và 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 8M 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 9M 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 10V 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 12B2: 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 13Mã 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 141.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 16Mã 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 17c 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 19M 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 25ng 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 26c 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 27c 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 30c 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 32Vi 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 33h 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 34c 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 35Gi i mã : Gi p
Trang 36Thông tin: Tên tác gi ,tài li u tham kh
Trang 37public 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 38public void actionPerformed(java.awt.event.ActionEvent evt) {
public void actionPerformed(java.awt.event.ActionEvent evt) {
Trang 40jLabel5.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 43int[] 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 44int[] 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 45char[][] 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 47bt_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 48tf_chuyenvi.setFont(new java.awt.Font("Times New Roman", 0, 14
bt_mahoa.setFont(new java.awt.Font("Times New Roman", 1, 14));
Trang 49jLabel1.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 53String 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 54public 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 56private 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 58ta_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)