Phát triển tính năng loại bỏ dữ liệu trùng lặp (data deduplication) cho dữ liệu đính kèm trong hệ thống thư điện tử sử dụng phần mềm HMailServer

77 223 0
Phát triển tính năng loại bỏ dữ liệu trùng lặp (data deduplication) cho dữ liệu đính kèm trong hệ thống thư điện tử sử dụng phần mềm HMailServer

Đ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

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN ANH TUẤN PHÁT TRIỂN TÍNH NĂNG LOẠI BỎ DỮ LIỆU TRÙNG LẶP (DATA DEDUPLICATION) CHO DỮ LIỆU ĐÍNH KÈM TRONG HỆ THỐNG THƯ ĐIỆN TỬ SỬ DỤNG PHẦN MỀM HMAILSERVER LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Hà Nội – 2017 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN ANH TUẤN PHÁT TRIỂN TÍNH NĂNG LOẠI BỎ DỮ LIỆU TRÙNG LẶP (DATA DEDUPLICATION) CHO DỮ LIỆU ĐÍNH KÈM TRONG HỆ THỐNG THƯ ĐIỆN TỬ SỬ DỤNG PHẦN MỀM HMAILSERVER Ngành: Công nghệ thông tin Chuyên ngành: Truyền liệu Mạng máy tính Mã số: Chuyên ngành đào tạo thí điểm LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: TS.HOÀNG XUÂN TÙNG Hà Nội – 2017 LỜI CAM ĐOAN Tôi xin cam đoan nội dung luận văn sản phẩm thực hướng dẫn Thầy giáo Tiến sĩ Hoàng Xuân Tùng Các kết khóa luận hoàn toàn trung thực chưa cá nhân, tổ chức công bố nghiên cứu Tôi xin chịu trách nhiệm cho lời cam đoan Hà Nội, ngày 28 tháng 05 năm 2017 Người cam đoan Nguyễn Anh Tuấn MỤC LỤC LỜI CAM ĐOAN MỤC LỤC DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG DANH SÁCH CÁC HÌNH VẼ, ĐỒ THỊ .6 LỜI MỞ ĐẦU CHƯƠNG I: TỔNG QUAN VỀ DATA DEDUPLICATION, HỆ THỐNG EMAIL VÀ MỐI LIÊN QUAN 1.1 Giới thiệu Data Deduplication 1.1.1 Data Deduplication gì? 1.1.2 Mục đích Data Deduplication .9 1.1.3 Phân loại Data Deduplication 10 1.1.3.1 File-level deduplication 10 1.1.3.2 Block-level deduplication 10 1.1.3.3 Byte-level deduplication 12 1.1.4 So sánh kiểu Data Deduplication 12 1.1.4.1 So sánh File-level với Block-level Deduplication .12 1.1.4.2 So sánh Block-level với Byte-level Deduplication 12 1.2 Tổng quan hệ thống Email 13 1.2.1 Các khái niệm Email 13 1.2.2 Lợi ích hệ thống Email 14 1.2.3 Kiến trúc chung hệ thống Email 14 1.2.4 Phương thức hoạt động hệ thống Email .15 1.2.5 Các giao thức sử dụng hệ thống Email 17 1.2.5.1 Giao thức SMTP 17 1.2.5.2 Giao thức IMAP 18 1.2.5.3 Giao thức POP 19 1.2.5.4 So sánh hai giao thức IMAP POP 19 1.2.6 Định dạng thư điện tử (Message format) 20 1.2.6.1 Message header 21 1.2.6.2 Message body .22 1.2.6.3 MIME format .22 1.3 Vấn đề Data Deduplication hệ thống Email 22 1.3.1 Lợi ích Data Deduplication hệ thống Email 22 1.3.2 Hệ thống email khả Data Deduplication 23 CHƯƠNG II: PHƯƠNG THỨC THỰC HIỆN DATA DEDUPLICATION VÀ GIẢI PHÁP CHO HỆ THỐNG EMAIL 26 2.1 Phương thức thực Data Deduplication 26 2.1.1 Source Target Deduplication 26 2.1.1.1 Source Deduplication 27 2.1.1.2 Target Deduplication 28 2.1.2 Inline Post-Process Deduplication 28 2.1.2.1 Inline Deduplication 29 2.1.2.2 Post-process Deduplication 29 2.1.3 File Sub-File Level 30 2.1.4 Fixed-Length Blocks Variable-Length Data Segments 30 2.1.5 Thuật toán băm (Hash-based Algorithms) 31 2.2 Một số sản phẩm ứng dụng Data Deduplication 32 2.3 Giải pháp chống trùng lặp liệu Email 33 2.4 Đề xuất lựa chọn hMailServer để thực nghiệm 34 CHƯƠNG III: TÍCH HỢP TÍNH NĂNG DEDUPLICATION TRONG HỆ THỐNG HMAILSERVER 36 3.1 Tổng quan hMailServer 36 3.1.1 Giới thiệu hMailServer 36 3.1.2 Các tính hMailServer 36 3.1.2.1 Cài đặt cấu hình đơn giản 36 3.1.2.2 Khả bảo mật cao 37 3.1.2.3 Khả tích hợp mở rộng 38 3.1.2.4 Các tính khác .38 3.1.3 Thư viện COM API sử dụng hMailServer 38 3.1.4 Môi trường phát triển hMailServer .40 3.2 Xây dựng hệ thống Email với hMailServer 41 3.2.1 Giới thiệu thành phần cài đặt quản trị 41 3.2.2 Cài đặt máy chủ Active Directory dịch vụ IIS 42 3.2.2.1 Cài đặt máy chủ Active Directory 42 3.2.2.2 Cài đặt dịch vụ IIS .44 3.2.3 Cài đặt Cấu hình hệ thống hMailServer 45 3.2.3.1 Cài đặt máy chủ hMailServer 45 3.2.3.2 Cài đặt quản trị WebAdmin WebMail .50 3.2.3.3 Cấu hình tên miền tài khoản người dùng 52 3.2.3.4 Hoạt động gửi / nhận email hMailServer 54 3.2.4 Nhận xét khả chống trùng lặp liệu hMailServer .56 3.3 Tích hợp tính deduplication hMailServer 56 3.3.1 Xây dựng kịch triển khai .56 3.3.2 Cài đặt kịch 56 3.3.3 Hoạt động hMailServer trường hợp tích hợp Deduplication .69 3.3.4 Tính bảo mật hệ thống 71 3.4 So sánh kết thực nghiệm 71 KẾT LUẬN 73 TÀI LIỆU THAM KHẢO 74 DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT Tên viết tắt Tên đầy đủ Data Deduplication AGPLv3 API ASCII Ý nghĩa Chống trùng lặp liệu Affero General Public License v3 Giấy phép xuất AGPL Ver3 Application Programming Interface American Standard Code for Information Interchange Giao diện lập trình ứng dụng Chuẩn trao đổi thông tin Hoa Kỳ COM library COM library Thư viện COM DNS Domain Name System Hệ thống phân giải tên miền Email Electronic Mail Thư điện tử HTML HyperText Markup Language IMAP Ngôn ngữ đánh dấu siêu văn Một giao thức truy cập thư điện Internet Message Access Protocol tử LAN Local Area Network Mạng nội MD5 Message-Digest algorithm Thuật toán MD5 MDA Mail Delivery Agent Máy chủ chuyển giao thư MIME Multipurpose Internet Mail Extensions Một chuẩn internet định dạng cho thư điện tử MTA Mail Transfer Agent Máy chủ gửi thư MUA Mail User Agent Phần mềm thư điện tử POP3 Post Office Protocol Ver3 RFC Request for Comments SHA-1 Secure Hash Algorithm SMTP Simple Mail Transfer Protocol SPF Sender Policy Framework SURBL Spam URI Realtime Blacklist Một giao thức truy cập thư điện tử Tài liệu đặc tả chuẩn, giao thức Thuật toán SHA-1 Giao thức truyền tải thư điện tử đơn giản Khung sách gửi thư điện tử dùng xác minh người gửi Một dạng lọc danh sách chống thư rác DANH MỤC CÁC BẢNG Bảng 1.1 Mô tả số lệnh giao thức SMTP 17 Bảng 1.2 Mô tả số lệnh giao thức IMAP 18 Bảng 1.3 Mô tả số lệnh giao thức POP 19 Bảng 1.4 So sánh hai giao thức IMAP POP 19 Bảng 1.5 So sánh tính số máy chủ email phổ biến 24 Bảng 2.1 So sánh sản phẩm deduplication số nhà cung cấp 32 Bảng 3.1 So sánh gần kết sử dụng Data Deduplication 71 DANH SÁCH CÁC HÌNH VẼ, ĐỒ THỊ Hình 1.1 So sánh hai tệp tin dựa thuộc tính tệp tin 10 Hình 1.2 Mô tả phương pháp block-level (dữ liệu chia thành khối nhỏ) 11 Hình 1.3 Mô tả phương pháp block-level (các khối so sánh để loại phần thừa) 12 Hình 1.4 Mô kiểu Data Deduplication [7] 12 Hình 1.5 Kiến trúc chung hệ thống email thông thường 15 Hình 1.6 Mô tả phương thức hoạt động hệ thống email 16 Hình 2.1 Mối tương quan yếu tố kỹ thuật công nghệ Deduplication 26 Hình 2.2 Mô tả kỹ thuật Deduplication nguồn 27 Hình 2.3 Mô tả kỹ thuật Deduplication đích 28 Hình 2.4 Mô tả kỹ thuật Inline Deduplication 29 Hình 2.5 Mô tả kỹ thuật Post-process Deduplication 30 Hình 2.6 Khối liệu tương tự khác vị trí 31 Hình 3.1 Quản lý hMailServer công cụ quản trị 37 Hình 3.2 Quản lý hMailServer giao diện web .37 Hình 3.3 Một ví dụ phương thức thuộc tính đối tượng Attachment 39 Hình 3.4 Mô hình triển khai hệ thống hMailServer .42 Hình 3.5 Trình thuật sĩ cài đặt Roles lên click chọn Add Roles 42 Hình 3.6 Chọn dịch vụ Active Directory để cài đặt .43 Hình 3.7 Màn hình thông báo kích hoạt dịch vụ Active Directory 43 Hình 3.8 Công cụ quản lý Active Directory Users and Computers .44 Hình 3.9 Lựa chọn dịch vụ Web Server (IIS) để cài đặt 44 Hình 3.10 Thêm website để lưu trữ tạo link cho tệp đính kèm 45 Hình 3.11 Cấu hình yêu cầu xác thực tài khoản windows IIS .45 Hình 3.12 Bắt đầu tiền hành cài đặt hMailServer 46 Hình 3.13 Chọn đường dẫn cài đặt hMailServer 46 Hình 3.14 Chọn thành phần để cài đặt cho hMailServer .47 Hình 3.15 Tùy chọn sở diệu để sử dụng cho hMailServer 47 Hình 3.16 Tạo mật để quản trị hMailServer 48 Hình 3.17 Quá trình cài đặt hMailServer diễn 48 Hình 3.18 Cấu hình kết nối sở liệu cho hMailServer 49 Hình 3.19 Cấu hình kết nối sở liệu cho hMailServer 49 Hình 3.20 Cấu hình tham số để tạo sở liệu cho hMailServer .50 Hình 3.21 Khởi chạy dịch vụ Apache Xampp v3.2.1 50 Hình 3.22 Cài đặt WebAdmin – chép thư mục PHPWebAdmin 51 Hình 3.23 Cài đặt WebAdmin – chỉnh sửa file confìg.php 51 Hình 3.24 Cài đặt WebAdmin – giao diện đăng nhập WebAdmin 52 Hình 3.25 Cài đặt WebMail – giao diện đăng nhập WebMail .52 Hình 3.26 Tạo Domain sử dụng hMailServer .53 Hình 3.27 Giao diện tạo tài khoản người dùng hMailServer 53 Hình 3.28 Sử dụng truy vấn SQL để xem danh sách email người dùng 54 Hình 3.29 Email gửi lưu hòm thư User1 55 Hình 3.30 Email gửi lưu hòm thư User2 55 Hình 3.31 Cùng email gửi lưu hòm thư User1 User2 56 Hình 3.32 Cài đặt kịch tích hợp chức deduplication 68 Hình 3.33 Tạo Rule để kích hoạt kịch 69 Hình 3.34 Chi tiết cấu hình Rule để kích hoạt kịch .69 Hình 3.35 Người dùng nhận email triển khai tính deduplication 70 Hình 3.36 Email lưu hòm thư người nhận với dung lượng nhỏ 70 Hình 3.37 Tệp đính kèm lưu máy chủ hMailServer .71 Hình 3.38 Mô tả trình chứng thực người dùng truy cập tệp tin đính kèm 71 LỜI MỞ ĐẦU Cùng với phát triển chung toàn xã hội, công nghệ thông tin bước phát triển ứng dụng rộng rãi thực tế Ngày nay, mạng Internet phát triển thành mạng số liệu toàn cầu cho phép nhiều loại hình thông tin truyền Trong số đó, thư điện tử (email) dịch vụ trở nên phổ biến hết Email cho phép giao dịch, trao đổi thông tin qua lại cách nhanh chóng, xác với độ tin cậy cao Tuy nhiên, đặc thù hệ thống email bao gồm nhiều người dùng người dùng nhận email từ nhiều người dùng khác hệ thống Do vậy, có vấn đề phát sinh lượng liệu trùng lặp (thông điệp thư gửi đi, tệp đính kèm,…) lưu trữ nhiều lần máy chủ email Nhận thức tính cấp thiết đề tài, tiến hành nghiên cứu phương pháp có khả chống trùng lặp liệu để từ ứng dụng hệ thống email nhằm mục đích tối giảm trùng lặp liệu việc gửi / nhận email hệ thống, để từ tiết kiệm không gian lưu trữ máy chủ tăng tốc độ truy xuất liệu cho người dùng Tên đề tài khóa luận là: “Phát triển tính loại bỏ liệu trùng lặp (Data Deduplication) cho liệu đính kèm hệ thống thư điện tử sử dụng phần mềm hMailServer” Để hoàn thành khóa luận này, xin gửi lời cảm ơn chân thành đến Thầy giáo: TS Hoàng Xuân Tùng, giảng viên khoa Công nghệ thông tin, Trường Đại Học Công Nghệ - Đại Học Quốc Gia Hà Nội tận tình hướng dẫn suốt thời gian thực đề tài Tôi xin gửi lời cảm ơn đến tất thầy giáo, cô giáo khoa Công Nghệ Thông Tin - Trường Đại Học Công Nghệ giảng dạy trang bị cho kiến thức để thực khóa luận Cuối cùng, xin gửi lời cảm ơn đến gia đình, anh chị, bạn bè đồng nghiệp tạo điều kiện, giúp đỡ suốt trình thực đề tài Hà Nội, ngày 28 tháng 05 năm 2017 Học viên: Nguyễn Anh Tuấn 61 '//========================================================= Public Function MD5FileHash(strFile) Dim strMD5 : strMD5 = "" Dim ofso : Set ofso = CreateObject("Scripting.FileSystemObject") If ofso.FileExists(strFile) then strMD5 = BinaryToString(ReadTextFile(strFile, "")) MD5FileHash = CalculateMD5(strMD5) Else MD5FileHash = strFile & VbCrLf & "Error: File not found" End if End Function ' -Function ReadTextFile(FileName, CharSet) Const adTypeText = Dim BinaryStream : Set BinaryStream = CreateObject("ADODB.Stream") BinaryStream.Type = adTypeText If Len(CharSet) > Then BinaryStream.CharSet = CharSet End If BinaryStream.Open BinaryStream.LoadFromFile FileName ReadTextFile = BinaryStream.ReadText End Function ' Function BinaryToString(Binary) Dim cl1, cl2, cl3, pl1, pl2, pl3 Dim L cl1 = cl2 = cl3 = L = LenB(Binary) Do While cl1300 Then pl2 = pl2 & pl3 pl3 = "" cl3 = cl2 = cl2 + If cl2>200 Then pl1 = pl1 & pl2 pl2 = "" cl2 = End If End If Loop BinaryToString = pl1 & pl2 & pl3 62 End Function ' Private Function MD5Round(strRound, a, b, C, d, X, S, ac) Select Case strRound Case "FF" a = MD5LongAdd4(a, (b And C) Or (Not (b) And d), X, ac) a = MD5Rotate(a, S) a = MD5LongAdd(a, b) Case "GG" a = MD5LongAdd4(a, (b And d) Or (C And Not (d)), X, ac) a = MD5Rotate(a, S) a = MD5LongAdd(a, b) Case "HH" a = MD5LongAdd4(a, b Xor C Xor d, X, ac) a = MD5Rotate(a, S) a = MD5LongAdd(a, b) Case "II" a = MD5LongAdd4(a, C Xor (b Or Not (d)), X, ac) a = MD5Rotate(a, S) a = MD5LongAdd(a, b) End Select End Function ' Private Function MD5Rotate(lngValue, lngBits) Dim lngSign Dim lngI lngBits = (lngBits Mod 32) If lngBits = Then MD5Rotate = lngValue: Exit Function For lngI = To lngBits lngSign = lngValue And &HC0000000 lngValue = (lngValue And &H3FFFFFFF) * lngValue = lngValue Or ((lngSign < 0) And 1) Or (CBool(lngSign And &H40000000) And &H80000000) Next MD5Rotate = lngValue End Function ' Private Function TRID() Dim sngNum, lngnum Dim strResult sngNum = Rnd(2147483648) strResult = CStr(sngNum) strResult = Replace(strResult, "0.", "") strResult = Replace(strResult, ".", "") strResult = Replace(strResult, "E-", "") TRID = strResult End Function ' - 63 Private Function MD564Split(lngLength, bytBuffer()) Dim lngBytesTotal, lngBytesToAdd Dim intLoop, intLoop2, lngTrace Dim intInnerLoop, intLoop3 lngBytesTotal = lngTrack Mod 64 lngBytesToAdd = 64 - lngBytesTotal lngTrack = (lngTrack + lngLength) If lngLength >= lngBytesToAdd Then For intLoop = To lngBytesToAdd - arrSplit64(lngBytesTotal + intLoop) = bytBuffer(intLoop) Next MD5Conversion arrSplit64 lngTrace = (lngLength) Mod 64 For intLoop2 = lngBytesToAdd To lngLength - intLoop - lngTrace Step 64 For intInnerLoop = To 63 arrSplit64(intInnerLoop) = bytBuffer(intLoop2 + intInnerLoop) Next MD5Conversion arrSplit64 Next lngBytesTotal = Else intLoop2 = End If For intLoop3 = To lngLength - intLoop2 - arrSplit64(lngBytesTotal + intLoop3) = bytBuffer(intLoop2 + intLoop3) Next End Function ' Private Function MD5StringArray(strInput) Dim intLoop Dim bytBuffer() ReDim bytBuffer(Len(strInput)) For intLoop = To Len(strInput) - bytBuffer(intLoop) = Asc(Mid(strInput, intLoop + 1, 1)) Next MD5StringArray = bytBuffer End Function ' -Private Sub MD5Conversion(bytBuffer()) Dim X(16), a Dim b, C Dim d a = arrLongConversion(1) b = arrLongConversion(2) C = arrLongConversion(3) d = arrLongConversion(4) 64 MD5Decode 64, X, bytBuffer MD5Round "FF", a, b, C, d, X(0), S11, -680876936 MD5Round "FF", d, a, b, C, X(1), S12, -389564586 MD5Round "FF", C, d, a, b, X(2), S13, 606105819 MD5Round "FF", b, C, d, a, X(3), S14, -1044525330 MD5Round "FF", a, b, C, d, X(4), S11, -176418897 MD5Round "FF", d, a, b, C, X(5), S12, 1200080426 MD5Round "FF", C, d, a, b, X(6), S13, -1473231341 MD5Round "FF", b, C, d, a, X(7), S14, -45705983 MD5Round "FF", a, b, C, d, X(8), S11, 1770035416 MD5Round "FF", d, a, b, C, X(9), S12, -1958414417 MD5Round "FF", C, d, a, b, X(10), S13, -42063 MD5Round "FF", b, C, d, a, X(11), S14, -1990404162 MD5Round "FF", a, b, C, d, X(12), S11, 1804603682 MD5Round "FF", d, a, b, C, X(13), S12, -40341101 MD5Round "FF", C, d, a, b, X(14), S13, -1502002290 MD5Round "FF", b, C, d, a, X(15), S14, 1236535329 MD5Round "GG", a, b, C, d, X(1), S21, -165796510 MD5Round "GG", d, a, b, C, X(6), S22, -1069501632 MD5Round "GG", C, d, a, b, X(11), S23, 643717713 MD5Round "GG", b, C, d, a, X(0), S24, -373897302 MD5Round "GG", a, b, C, d, X(5), S21, -701558691 MD5Round "GG", d, a, b, C, X(10), S22, 38016083 MD5Round "GG", C, d, a, b, X(15), S23, -660478335 MD5Round "GG", b, C, d, a, X(4), S24, -405537848 MD5Round "GG", a, b, C, d, X(9), S21, 568446438 MD5Round "GG", d, a, b, C, X(14), S22, -1019803690 MD5Round "GG", C, d, a, b, X(3), S23, -187363961 MD5Round "GG", b, C, d, a, X(8), S24, 1163531501 MD5Round "GG", a, b, C, d, X(13), S21, -1444681467 MD5Round "GG", d, a, b, C, X(2), S22, -51403784 MD5Round "GG", C, d, a, b, X(7), S23, 1735328473 MD5Round "GG", b, C, d, a, X(12), S24, -1926607734 MD5Round "HH", a, b, C, d, X(5), S31, -378558 MD5Round "HH", d, a, b, C, X(8), S32, -2022574463 MD5Round "HH", C, d, a, b, X(11), S33, 1839030562 MD5Round "HH", b, C, d, a, X(14), S34, -35309556 MD5Round "HH", a, b, C, d, X(1), S31, -1530992060 MD5Round "HH", d, a, b, C, X(4), S32, 1272893353 MD5Round "HH", C, d, a, b, X(7), S33, -155497632 MD5Round "HH", b, C, d, a, X(10), S34, -1094730640 MD5Round "HH", a, b, C, d, X(13), S31, 681279174 MD5Round "HH", d, a, b, C, X(0), S32, -358537222 MD5Round "HH", C, d, a, b, X(3), S33, -722521979 MD5Round "HH", b, C, d, a, X(6), S34, 76029189 MD5Round "HH", a, b, C, d, X(9), S31, -640364487 MD5Round "HH", d, a, b, C, X(12), S32, -421815835 MD5Round "HH", C, d, a, b, X(15), S33, 530742520 65 MD5Round "HH", b, C, d, a, X(2), S34, -995338651 MD5Round "II", a, b, C, d, X(0), S41, -198630844 MD5Round "II", d, a, b, C, X(7), S42, 1126891415 MD5Round "II", C, d, a, b, X(14), S43, -1416354905 MD5Round "II", b, C, d, a, X(5), S44, -57434055 MD5Round "II", a, b, C, d, X(12), S41, 1700485571 MD5Round "II", d, a, b, C, X(3), S42, -1894986606 MD5Round "II", C, d, a, b, X(10), S43, -1051523 MD5Round "II", b, C, d, a, X(1), S44, -2054922799 MD5Round "II", a, b, C, d, X(8), S41, 1873313359 MD5Round "II", d, a, b, C, X(15), S42, -30611744 MD5Round "II", C, d, a, b, X(6), S43, -1560198380 MD5Round "II", b, C, d, a, X(13), S44, 1309151649 MD5Round "II", a, b, C, d, X(4), S41, -145523070 MD5Round "II", d, a, b, C, X(11), S42, -1120210379 MD5Round "II", C, d, a, b, X(2), S43, 718787259 MD5Round "II", b, C, d, a, X(9), S44, -343485551 arrLongConversion(1) = MD5LongAdd(arrLongConversion(1), a) arrLongConversion(2) = MD5LongAdd(arrLongConversion(2), b) arrLongConversion(3) = MD5LongAdd(arrLongConversion(3), C) arrLongConversion(4) = MD5LongAdd(arrLongConversion(4), d) End Sub ' Private Function MD5LongAdd(lngVal1, lngVal2) Dim lngHighWord Dim lngLowWord Dim lngOverflow lngLowWord = (lngVal1 And &HFFFF&) + (lngVal2 And &HFFFF&) lngOverflow = lngLowWord \ 65536 lngHighWord = (((lngVal1 And &HFFFF0000) \ 65536) + ((lngVal2 And &HFFFF0000) \ 65536) + lngOverflow) And &HFFFF& MD5LongAdd = MD5LongConversion((lngHighWord * 65536) + (lngLowWord And &HFFFF&)) End Function ' -Private Function MD5LongAdd4(lngVal1, lngVal2, lngVal3, lngVal4) Dim lngHighWord Dim lngLowWord Dim lngOverflow lngLowWord = (lngVal1 And &HFFFF&) + (lngVal2 And &HFFFF&) + (lngVal3 And &HFFFF&) + (lngVal4 And &HFFFF&) lngOverflow = lngLowWord \ 65536 lngHighWord = (((lngVal1 And &HFFFF0000) \ 65536) + ((lngVal2 And &HFFFF0000) \ 65536) + ((lngVal3 And &HFFFF0000) \ 65536) + ((lngVal4 And &HFFFF0000) \ 65536) + lngOverflow) And &HFFFF& MD5LongAdd4 = MD5LongConversion((lngHighWord * 65536) + (lngLowWord And &HFFFF&)) End Function 66 ' Private Sub MD5Decode(intLength, lngOutBuffer(), bytInBuffer()) Dim intDblIndex Dim intByteIndex Dim dblSum intDblIndex = For intByteIndex = To intLength - Step dblSum = bytInBuffer(intByteIndex) + bytInBuffer(intByteIndex + 1) * 256 + bytInBuffer(intByteIndex + 2) * 65536 + bytInBuffer(intByteIndex + 3) * 16777216 lngOutBuffer(intDblIndex) = MD5LongConversion(dblSum) intDblIndex = (intDblIndex + 1) Next End Sub ' -Private Function MD5LongConversion(dblValue) If dblValue < Or dblValue >= OFFSET_4 Then Error If dblValue

Ngày đăng: 18/07/2017, 21:25

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan