Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 64 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
64
Dung lượng
1,41 MB
Nội dung
Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA TIN - - PHẠM HỒNG MINH XÂY DỰNG PHẦN MỀM MÃ HĨA VÀ CHUYỂN ĐỔI DỮ LIỆU GIỮA EXCEL VÀ MYSQL KHÓA LUẬN TỐT NGHIỆP SV thực hiện: Phạm Hoàng Minh – Lớp 08CNTT1 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ MỤC LỤC MỤC LỤC .1 DANH MỤC HÌNH VẼ MỞ ĐẦU CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Mã hóa 1.2 Cơ sở liệu MySQL 10 1.3 Microsoft Excel 13 1.4 Ngơn ngữ lập trình JAVA 13 1.5 Ngôn ngữ XML 14 1.6 Mối quan hệ cấu trúc bảng tính EXCEL CSDL MySQL 16 1.6.1 Cấu trúc file Excel 16 1.6.2 Cấu trúc lưu trữ liệu MySQL 17 1.6.3 Điểm tương đồng cấu trúc Excel MySQL 18 1.6.4 Các ràng buộc cấu trúc Excel MySQL 18 CHƯƠNG 2: MÃ HÓA VÀ CHUYỂN ĐỔI DỮ LIỆU 20 2.1 Mơ hình mã hóa, giải mã chuyển đổi 20 2.1.1 Mơ hình mã hóa 20 2.1.2 Mơ hình giải mã 21 2.1.3 Mơ hình chuyển đổi liệu 22 2.2 Phương pháp mã hóa giải mã file text 22 2.3 Phương pháp chuyển đổi liệu .24 CHƯƠNG 3: XÂY DỰNG PHẦN MỀM MÃ HÓA VÀ CHUYỂN ĐỔI DỮ LIỆU 28 3.1 Mục đích u cầu chương trình 28 3.2 Môi trường công cụ sử dụng 28 3.2.1 Môi trường 28 SV thực hiện: Phạm Hoàng Minh – Lớp 08CNTT1 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ 3.2.2 Công cụ 29 3.3 Giao diện chương trình .31 KẾT LUẬN .42 TÀI LIỆU THAM KHẢO 43 PHỤ LỤC .44 SV thực hiện: Phạm Hoàng Minh – Lớp 08CNTT1 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ DANH MỤC HÌNH VẼ Hình 1.1: File Excel …………………….……………………………….… … 15 Hình 1.2: CSDL MySQL phần mềm MySQL Workbench …………….… 16 Hình 1.3: File Excel thiết kế theo ràng buộc …………………………… … 18 Hình 2.1: Mơ hình mã hóa file Excel ……………………….……………… … 19 Hình 2.2: Mơ hình mã hóa CSDL MySQL ……………………….……….….… 19 Hình 2.3: Mơ hình giải mã liệu …………………………………… …… … 20 Hình 2.4: Mơ hình chuyển đổi liệu ……………………………………… 21 Hình 3.1: Mơ hình JVM …………………………………………………… … 27 Hình 3.2: Netbean ………………………………………………………… … 28 Hình 3.3: MySQL Workbech ………………………………………….…….… 28 Hình 3.4: Giao diện vào chương trình … ……………………………… … 29 Hình 3.5: Giao diện cửa sổ conversion ……………………………………… 30 Hình 3.6: Giao diện chức chuyển đổi liệu từ Excel sang MySQL … … 31 Hình 3.7: Giao diện chức chuyển đổi liệu từ MySQL sang Excel … … 32 Hình 3.8: Giao diện cửa sổ Encryption …………………………………….… 33 Hình 3.9: Giao diện chức mã hóa file Excel …………………………… 34 Hình 3.10: Giao diện chức mã hóa CSDL MySQL …………………….… 35 Hình 3.11: Giao diện cửa sổ Decryption …………………………………… … 36 Hình 3.12: Giao diện chức giải mã sang file Excel …………………… … 37 Hình 3.13: Giao diện chức giải mã sang CSDL MySQL ……………….… 38 Hình 3.14: Chức browse ……………………………………………… … 39 SV thực hiện: Phạm Hoàng Minh – Lớp 08CNTT1 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ MỞ ĐẦU Lý chọn đề tài Ngày nay, phát triển chóng mặt Internet tác động đến cách sống làm việc người Với tiện ích mà mang lại, ngày khó hình dung hoạt động giới khơng có hỗ trợ Internet Thơng tin trở thành hàng hóa, Internet trở thành siêu xa lộ với việc chuyển tải cung ứng lượng thông tin khổng lồ cho nhu cầu khác giới Vì vấn đề bảo mật thông tin ngày cấp thiết việc triển khai mạng diện rộng, CSDL lớn liên quan đến nhiều nguồn tài nguyên thông tin nhiều lĩnh vực việc thực nhiều dịch vụ ứng dụng quan trọng mạng Như biết phần lớn liệu ngày lưu trữ dạng sở liệu (CSDL) như:MySQL, Access, SQL, Oracle …v.v dạng bảng tính Excel Do đặc tính kỹ thuật u cầu cơng việc nên công ty, cá nhân lựa chọn cho kiểu CSDL khác trở thành thói quen Trong q trình phát triển, kiểu CSDL khơng cịn phù hợp nữa, cần phải chuyển sang kiểu CSDL khác Trong xu phát triển chung ấy, trường ta khơng có thay đổi việc lựa chọn lại kiểu CSDL cho phù hợp với công việc bảo đảm việc bảo mật liệu Một công việc trường liên quan đến việc học tập sinh viên quản lí điểm Lâu nay, trường ta thực việc quản lý điểm sinh viên bảng tính Excel Microsoft Tuy nhiên cơng cụ ngày bộc lộ bất cập nhà trường phát triển phần mềm quản lý hồn chỉnh hơn, liệu tổ chức dạng CSDL MySQL Việc xây dựng phần mềm để chuyển đổi liệu từ bảng tính Excel CSDL MySQL đồng thời mã hóa chúng để việc truyền liệu Internet an tồn vấn đề cấp thiết Vì tơi chọn đề tài “Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL” làm đề tài luận văn tốt nghiệp Mục đích nghiên cứu Xây dựng phần mềm với chức - Mã hóa liệu bảng tính Excel CSDL MyS2QL để lưu trữ truyền đường truyền SV thực hiện: Phạm Hoàng Minh – Lớp 08CNTT1 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ - Chuyển đổi liệu dạng bảng Excel sang CSDL MySQL ngược lại, lấy XML làm trung gian Đối tượng phạm vi nghiên cứu - Đề tài tập trung nghiên cứu đối tượng sau : + Cấu trúc, kiểu liệu CSDL MySQL + Tổ chức liệu file XML + Mối tương đồng bảng tính (sheet) Excel table CSDL tạo cấu trúc cho file XML + Thuật tốn mã hóa giải mã liệu + Ngơn ngữ lập trình JAVA - Phạm vi nghiên cứu đề tài: CSDL phục vụ cho việc quản lý điểm sinh viên trường Đại học Sư Phạm – Đại học Đà Nẵng Phương pháp nghiên cứu Lý thuyết: Thu thập, phân tích, tổng hợp tài liệu liên quan từ Internet, sách… từ xây dựng thuật tốn mã hóa thuật tốn chuyển đổi Thực nghiệm: Sử dụng ngơn ngữ JAVA để xây dựng chương trình mã hóa chuyển đổi liệu Excel MySQL Cấu trúc luận văn Đề tài gồm phần mở đầu, chương kết luận: - Chương 1: Cơ sở lý thuyết Chương trình bày sở lý thuyết bảo mật, bảng tính Excel, CSDL MySQL, XML ngơn ngữ lập trình JAVA - Chương 2: Mã hóa chuyển đổi liệu Excel MySQL Chương trình bày giải thuật mã hóa phương pháp chuyển đổi liệu bảng tính Excel MySQL - Chương 3: Thiết kế cài đặt chương trình Trình bày giao diện, cách thức làm việc với chương trình SV thực hiện: Phạm Hồng Minh – Lớp 08CNTT1 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Mã hóa Có phương pháp khác để đạt tới mục tiêu bảo mật thông tin hệ thống máy tính kiểm sốt lối vào mã hóa liệu Phương pháp mã hóa giúp thông tin lưu trữ truyền hệ thống dạng mã người truy cập trái phép dù có thơng tin vơ dụng họ khơng biết cách giải mã Có thể chia hệ mã thành hai loại chính: - Hệ mã hố đối xứng (Symmetric-key Encryption) - Hệ mã hố cơng khai (Public-key Encryption) Trong phạm vi đề tài tơi sử dụng phương pháp mã hóa với khóa đối xứng để mã hóa liệu: Từ ta quy ước số ký hiệu sau: M: Không gian rõ, rõ chuỗi ký tự cần mã hóa C : Khơng gian mã, mã chuỗi ký tự mã hóa K: Khơng gian khóa, khóa chuỗi ký tự Trong đó: ek: Khóa mã hóa dk: Khóa giải mã E: Hàm mã hóa: E (ek, M) = C D: Hàm giải mã: D (dk, C) = M Các hàm D phải thỏa tính chất: D (dk, ) = D (dk, (ek, )) = M, , M M , CC hàm khả tính tốt, nghĩa chúng có thuật tốn để thực việc cài đặt, tốc độ tính tốn nhanh kích thước khơng q lớn so với ; điều làm tăng tính hiệu tiết kiệm tài nguyên máy tính Hơn nữa, việc tính toán thực số nguyên nhằm tránh sai sót xuất làm việc với số thực SV thực hiện: Phạm Hoàng Minh – Lớp 08CNTT1 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ Hệ mã khóa đối xứng có tính chất biết khóa lập mã ek ta dễ dàng tìm khóa giải mã dk Hoặc q trình mã hóa lẫn giải mã sử dụng khóa hệ thống mã cịn gọi hệ mã khố bí mật Việc giữ bí mật khóa trở thành vấn đề sống hệ mã - Trước hết người gửi sử dụng phép biến đổi khả nghịch để tạo văn mã hóa: ek : M ek () = C, M M , C CC truyền kênh công cộng cho người nhận - Khóa k truyền cho người nhận để giải mã thơng qua kênh an tồn - Người nhận hợp lệ biết khóa k giải mã C theo phép biến đổi dk: C M Để rõ: dk (C) = dk (ek ()) = M, M M, C C Có nhiều dạng mã đối xứng khác chọn phương pháp mã hóa Vigenere phương pháp giải thuật phương pháp ngắn gon việc bảo mật có tính an tồn cao cần giá trị khóa nhỏ việc phá khóa địi hỏi nhiều thời gian Phương pháp mã hóa Vigenere trình bày sau: Cho m số nguyên dương xác định Với k = (k1, , km), ta định nghĩa ek( e1, , em ) = (x1 + k1, , xm + km ) dk( y1, , ym) = (y1 - k1, , ym - km ) Với tất phép toán Z26 SV thực hiện: Phạm Hoàng Minh – Lớp 08CNTT1 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ Ta sử dụng bảng tương ứng sau: A B C D E F G H I J K L M 10 11 12 N O P Q R S T U V W X Y Z 13 14 15 16 17 18 19 20 21 22 23 24 25 Sử dụng tương ứng A 0, Z 25 nói ta xem khóa k xâu ký tự có chiều dài m, xâu gọi từ khóa Mã Vigenere mã hóa m ký tự lúc sau: phần tử rõ tương đương với m ký tự bảng chữ Ví dụ: Giả sử m = từ khóa CIPHER Từ khóa tương đương với khóa k = (2, 8, 15, 7, 4, 17) Giả sử rõ dòng THISCRYPTOSYSTEMNOTSECURE Ta chuyển phần tử rõ thành số dư theo modun 26, viết chúng thành nhóm số, sau “cộng” từ khóa theo modun 26 sau 19 18 17 24 15 19 14 18 15 17 15 21 15 23 25 34 26 23 21 22 24 18 19 12 18 12 14 19 18 17 15 17 15 15 20 19 19 12 14 22 25 20 17 17 15 19 22 25 19 Xâu ký tự mã tương đương: VPXZGIAXIVWPUBTTMJPWIZITWZT SV thực hiện: Phạm Hoàng Minh – Lớp 08CNTT1 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ Để giải mã ta sử dụng từ khóa phải thực phép trừ theo modun 26 Chú ý mã Vigenere có 26m khóa, nên m nhỏ khơng gian khóa lớn để việc phá khóa nhiều thời gian.Ví dụ, với m = số khóa khoảng 1.1*107 Trong đề tài để mã hóa tồn ký tự tơi sử dụng bảng ASCII để mã hóa nên khơng gian khóa (Z256)m 1.2 Cơ sở liệu MySQL MySQL hệ quản trị sở liệu mã nguồn mở phổ biến giới nhà phát triển ưa chuộng trình phát triển ứng dụng Vì MySQL sở liệu tốc độ cao, ổn định dễ sử dụng, có tính khả chuyển, hoạt động nhiều hệ điều hành cung cấp hệ thống lớn hàm tiện ích mạnh.Với tốc độ tính bảo mật cao, MySQL thích hợp cho ứng dụng có truy cập CSDL internet MySQL miễn phí hồn tồn bạn tải MySQL từ trang chủ Nó có nhiều phiên cho hệ điều hành khác nhau: phiên Win32 cho hệ điều hành dòng Windows, Linux, Mac OSX… MySQL ví dụ Hệ Quản trị Cơ sở liệu quan hệ sử dụng Ngơn ngữ truy vấn có cấu trúc (SQL) MySQL sử dụng cho việc bổ trợ PHP, Perl, nhiều ngơn ngữ khác, làm nơi lưu trữ thông tin trang web viết PHP hay Perl, Các kiểu liệu hệ quản trị CSDL MySQL: - Loại liệu numeric gồm kiểu số nguyên kiểu chấm động: + Kiểu liệu số nguyên Loại Range Bytes Giải thích Tinyint -127 đến 128 hay …255 Số nguyên nhỏ Smallint -32768 đến 32767 hay 0…65535 Số nguyên nhỏ Mediumint -8388608 đến 838860 hay 0…16777215 Số nguyên vừa Int -231 đến 231 -1 hay 0…232 – Số nguyên Bigint -263 đến 263 -1 hay 0…264 -1 SV thực hiện: Phạm Hoàng Minh – Lớp 08CNTT1 Số nguyên lớn 10 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ } } ncolumn++; } } } } fXMLFile.delete(); workbook.write(); workbook.close(); }catch (Exception ex) { System.out.println("ERROR : "+ex); } Code chuyển XML sang CSDL MySQL public void run(String userf, String passf, String dbf, String urlf) { Connection = null; String URLConnection = "jdbc:mysql://localhost:3306/musicdb?useUnicode=true&characterEncoding=UTF-8"; String url = "jdbc:mysql://localhost:3306/"; String db = dbf; String driver = "com.mysql.jdbc.Driver"; String user = userf; String pass = passf; tool tl = new tool(); tl.create_db(db, user, pass); tl.translatefile(urlf); File fin = new File(urlf); File fXMLFile = new File(fin.getParent()+"\\"+"temp.XML"); try { Class.forName(driver).newInstance(); = (Connection) DriverManager.getConnection(url+db+"?useUnicode=true&characterEncoding=UTF-8",user,pass); Statement st = (Statement) con.createStatement(); SV thực hiện: Phạm Hoàng Minh – Lớp 08CNTT1 50 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXMLFile); doc.getDocumentElement().normalize(); // Create table in database NodeList nlist = doc.getElementsByTagName("table"); // create SQL query to create table for(int i = 0; i < nlist.getLength(); i++) { String sqltable = "CREATE TABLE "; Node ntable = nlist.item(i); int first = 0; if (ntable.getNodeType() == Node.ELEMENT_NODE) { Element etable = (Element) ntable; //System.out.println("Table name : "+element.getAttribute("name")); sqltable = sqltable + etable.getAttribute("name")+"("; NodeList listcolum = etable.getChildNodes(); for(int j = 0; j < listcolum.getLength(); j++) { Node ncolumn = listcolum.item(j); if (first ==0 && ncolumn.getNodeType() == Node.ELEMENT_NODE) { Element lelement = (Element) ncolumn; sqltable = sqltable + lelement.getAttribute("name") + " "+lelement.getAttribute("type")+",PRIMARY KEY("+lelement.getAttribute("name")+"),"; first = 1; } else if (ncolumn.getNodeType() == Node.ELEMENT_NODE && j != listcolum.getLength()-2) { Element lelement = (Element) ncolumn; sqltable = sqltable + lelement.getAttribute("name") + " "+lelement.getAttribute("type")+","; first = 1; SV thực hiện: Phạm Hoàng Minh – Lớp 08CNTT1 51 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ } else if(ncolumn.getNodeType() == Node.ELEMENT_NODE ) { Element lelement = (Element) ncolumn; sqltable = sqltable + lelement.getAttribute("name") + " "+lelement.getAttribute("type") + ")"; first = 0; } } } System.out.println(sqltable); st.executeUpdate(sqltable); } // Add data into column NodeList listtable = doc.getElementsByTagName("table"); boolean firstcl = true; int savej = 0; for(int i = 0; i < listtable.getLength(); i++) // review table { Node tabnode = listtable.item(i); // get node table if (tabnode.getNodeType() == Node.ELEMENT_NODE ) { Element etable = (Element) tabnode; // get element table NodeList listcloumn = etable.getChildNodes(); // get list column for(int j = 0; j < listcloumn.getLength(); j++)// review column { Node nodecolumn = listcloumn.item(j); // get node column if (nodecolumn.getNodeType() == Node.ELEMENT_NODE ) { Element ecolumn = (Element) nodecolumn; // get element column NodeList listdata = ecolumn.getChildNodes(); // get list data of column for(int k = 0; k < listdata.getLength(); k++) { Node nodedata = listdata.item(k); //System.out.println(firstcl); if(nodedata.getNodeType() == Node.ELEMENT_NODE && firstcl == true) { SV thực hiện: Phạm Hoàng Minh – Lớp 08CNTT1 52 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ Element edata = (Element) nodedata; String sql = "INSERT INTO "+etable.getAttribute("name") + "("+ecolumn.getAttribute("name")+") VALUES ('"+edata.getXMLContent()+"')"; //System.out.println(sql); st.executeUpdate(sql); } else if(nodedata.getNodeType() == Node.ELEMENT_NODE && firstcl == false) { Element edata = (Element) nodedata; Node Fnode = listcloumn.item(savej); // get Node trước node column chạy Element Felement = (Element) Fnode; NodeList ListDataFnode = Fnode.getChildNodes(); Element EdataFnode = (Element) ListDataFnode.item(k); String sql = "UPDATE "+etable.getAttribute("name")+" SET "+ecolumn.getAttribute("name")+"='"+edata.getXMLContent()+"' WHERE "+Felement.getAttribute("name")+"='"+EdataFnode.getXMLContent()+"'"; //System.out.println(sql); st.executeUpdate(sql); } // chuyen data } savej = j; firstcl = false; } // chuyen column } firstcl = true; } } fXMLFile.delete(); } catch (Exception ex) { System.out.println("ERROR : "+ex); } } private static String getTagValue(String sTag, Element eElement) { NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes(); SV thực hiện: Phạm Hoàng Minh – Lớp 08CNTT1 53 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ Node nValue = (Node) nlList.item(0); return nValue.getNodeValue(); } Code mã hóa file Excel encoding enc = new encoding(key); try { File fexcel = new File(urlfileexcel); Workbook w; File tg = new File(urlfiletxt); FileOutputStream fos = new FileOutputStream(tg); PrintWriter pw = new PrintWriter(fos); w = Workbook.getWorkbook(fexcel); // Get the first sheet Sheet[] listsheet = w.getSheets(); // Loop over first 10 column and lines pw.println(enc.encode("")); pw.println(enc.encode("")); //System.out.println(""); //System.out.println(""); for(int i = 0; i < listsheet.length; i++)// duyet cac sheet { pw.println(enc.encode(""));// table == sheet for (int j = 0; j < listsheet[i].getColumns(); j++) { Cell namecl = listsheet[i].getCell(j, 0); Cell typecl = listsheet[i].getCell(j, 1); String type; if( typecl.getType().toString() == "Number") type = "FLOAT(12)"; else type = "VARCHAR(645)"; SV thực hiện: Phạm Hoàng Minh – Lớp 08CNTT1 54 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ pw.println(enc.encode("")); for (int k = 1; k < listsheet[i].getRows(); k++) // hang dau tien la column // hang thu >2 data { Cell cell = listsheet[i].getCell(j, k); pw.println(enc.encode(""+cell.getContents()+"")); } pw.println(enc.encode("")); } pw.println(enc.encode("")); } pw.println(enc.encode("")); pw.close(); fos.close(); return 1; } catch (Exception e) { System.out.println("ERROR : "+e); return 0; } Code mã hóa CSDL MySQL Connection = null; String url = "jdbc:mysql://localhost:3306/"; String db = dbf; String driver ="com.mysql.jdbc.Driver"; String user = userf; // nguoi dung nhap String pass = passf; // nguoi dung nhap String tablename; //String tg; int i; int colnum; try SV thực hiện: Phạm Hoàng Minh – Lớp 08CNTT1 55 Xây dựng phần mềm mã hóa chuyển đổi liệu Excel MySQL _ { Class.forName(driver).newInstance(); = DriverManager.getConnection(url+db,user,pass); File tg = new File(urlf); FileOutputStream fos = new FileOutputStream(tg); PrintWriter pw = new PrintWriter(fos); encoding enc = new encoding(key); pw.println(enc.encode("")); pw.println(enc.encode("")); try{ Statement stm = con.createStatement(); DatabaseMetaData dbm = con.getMetaData(); String[] types = {"TABLE"}; ResultSet rstb = dbm.getTables(null, null,"%", types); while (rstb.next()) { tablename=rstb.getString("TABLE_NAME"); //enc.encode pw.println(enc.encode("")); ResultSet rs = stm.executeQuery("select *from "+tablename); ResultSetMetaData rsm = rs.getMetaData(); colnum = rsm.getColumnCount(); //System.out.println("Minh : "+colnum); for ( i = 1; i