1. Trang chủ
  2. » Luận Văn - Báo Cáo

Phần mềm bảo mật mạng dùng giao thức ip q 4c, phần mềm bảo mật trên môi trường windows

74 5 0

Đ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 74
Dung lượng 563,22 KB

Nội dung

Chơng trình KC-01: Nghiên cứu khoa học phát triển công nghệ thông tin truyền thông Đề tài KC-01-01: Nghiên cứu số vấn đề bảo mật an toàn thông tin cho mạng dùng giao thức liên mạng máy tính IP Báo cáo kết nghiên cứu Phần mềm bảo mật mạng dùng giao thức IP Quyển 4C: Phần mềm bảo mật môi trờng Windows Hà NộI-2002 Báo cáo kết nghiên cứu Phần mềm bảo mật mạng dùng giao thức IP Quyển 4C: Phần mềm bảo mật môi trờng Windows Chủ trì nhóm thực hiện: TS Nguyễn Nam Hải Mục lục Mở đầu cHƯƠNG Mô hình Winsock Winsock Model Xây dựng DLL Winsock Sự liên kết Client Server mô hình Winsock Các trạng thái socket 4.1 Các trạng thái socket kiểu datagram 4.2 Các trạng thái socket kiểu stream cHƯƠNG Xây dựng Socket mật mà Giới thiệu Các yêu cÇu thiÕt kÕ KiÕn tróc Thùc hiƯn 4.1 Phơng pháp chặn 4.2 Khung liệu 4.3 Thao tác kiểu dị 4.4 Thao tác Thoả thuận 5.1 Xác thực 5.2 Chuỗi thoả thuận Chơng lợc đồ mà hoá IDEA sử dụng để mà hoá liệu 1.Những điểm 2.Các phép toán sử dụng IDEA Mà hóa giải mà IDEA Phơ lơc: phÇn mỊm SecureSocket thư nghiƯm Më đầu Đảm bảo an toàn thông tin mạng máy tính công việc phức tạp Thông tin mạng máy tính gặp nhiều hiểm hoạ từ hiểm hoạ ngẫu nhiên hiểm hoạ cố ý Tất hiểm hoạ dẫn đến mát thông tin dới nhiều góc độ khác Do bảo vệ thông tin mạng máy tính công việc cần thiết Công nghệ thông tin sâu vào sống vấn đề an toàn thông tin phải đợc quan tâm Tin học hoá toàn hoạt động xà hội xu tất yếu Trong xà hội đợc tin học hoá cao vai trò hệ thống thông tin máy tính to lớn Bởi vấn đề an toàn thông tin mạng máy tính chủ đề tơng đối rộng bao hàm nhiều lĩnh vực khác Cho nên điều kiện cđa n†íc ta lµ mét n†íc phơ thc hoµn toµn vào công nghệ nhập ngoại vấn đề an toàn cần phải đợc nghiên cứu cho phù hợp với hoàn cảnh Làm vừa tận dụng đợc sức mạnh hệ thống phần mềm thơng mại nhng kiểm soát đợc mức độ an toàn thông tin mạng vấn đề đáng đợc quan tâm Nội dung nghiên cứu phần nhằm mục đích nghiên cứu xây dựng giải pháp bảo vệ thông tin mạng máy tính đợc xây dựng tảng mô hình mạng Winsock Mô hình mạng Winsock mô hình mạng đợc phát triển mạnh mẽ sử dụng rộng rÃi ngày Do định hớng nghiên cứu vào mô hình cần thiết có ý nghĩa thực tiễn Trong phần tài liệu này, trình bầy số vần đề sau: ã Mô hình Windows Socket, ã Mô hình SecureSocket, ã Thiết kế chơng trình thử nghiệm cHƯƠNG Mô hình Winsock Winsock Model Để thực mục tiêu bảo vệ thông tin CSDL, lựa chọn mô hình mạng Winsock để tiếp cận đến mục tiêu Sở dĩ lựa chọn mô hình Winsock lý sau: ã Winsock mô hình đợc sử dụng rộng rÃi ã Winsock mô hình mở, cho phép ta can thiệp để đạt đợc mục tiêu mong muốn Một mô hình mạng mà đà biết đợc xem nh kiến trúc mạng chuẩn mô hình mạng OSI Mục đích mô hình đồng định nghĩa tập hàm chung để xử lý truyền thông mạng máy tính nối mạng với Mô hình mạng Winsock đợc xây dựng tinh thần mô hình mở OSI nhiên có điểm khác biệt Mô hình mạng Winsock đợc tổ chức thành phần sau: ã Winsock application: Cung cấp chức tầng 5,6,7 mô hình OSI ã Network system: cung cấp chức tầng 1,2,3,4 mô hình OSI ã Winsock API: cho phép tầng truy nhập dịch vụ tầng dới Ta minh hoạ mô hình mạng Winsock hình sau Windows Sockets APP Windows Sockets API Bé giao thức TCP/IP Network Driver Network system Network Interface Mô hình mạng Winsock Winsock APP chơng trình ứng dụng cïng víi giao diƯn ng†êi dïng Nã cịng cã thĨ th viện động DLL trung gian với API mức cao ứng dụng Trong mô hình Winsock ta xem ứng dụng bất kú mµ truy nhËp Winsock DLL nh† lµ mét øng dơng cđa Winsock Winsock API (WSA) cung cÊp truy nhËp tới Network system ứng dụng Winsock sử dụng dịch vụ hệ thống để gửi nhận thông tin Network system truyền nhận liệu mà không quan tâm đến nội dung ngữ nghÜa cđa nã Khi Winsock APP gưi mét khèi d÷ liệu, Network system chia khối liệu thành nhiều đoạn khác hợp lại ®Çu nhËn tr†íc chun giao Nã cịng cã thĨ xem liệu nh dòng bytes yêu cầu ứng dụng hợp lại sau chuyển giao Dữ liệu đợc xem nh phụ thuộc vào dịch vụ tầng vận tải đợc yêu cầu Nhng trờng hợp Network system chuyển giao liệu mà không quan tâm đến nội dung ngữ nghĩa liệu Mô hình mạng Winsock chất dạng đơn giản mô hình OSI Tuy vậy, tầng chức mô hình OSI tồn mô hình Winsock ë møc quan niƯm Windows Socket ®éc lËp víi giao thøc cho nªn nã cã thĨ thÝch nghi víi nhiỊu giao thức khác Nó độc lập với thiết bị mạng ứng dụng Windows Socket chạy thiết bị mạng mà Windows system hỗ trợ Windows socket hỗ trợ số giao thức khác đồng thêi øng dơng cđa Windows socket liªn hƯ víi øng dụng chạy máy tính khác minh hoạ hình sau Network Host A Network Host B APP APP Presentation Presentation Session Session Transport Router Session Network Network Network Data Link Data Link Data Link Physical Physical Physical Window socket APP Window socket API Network system TruyÒn thông tầng đồng mức Các tầng đồng mức hội thoại với sử dụng giao thức tập qui tắc để giao tiếp tầng đồng mức Các qui tắc mô tả yêu cầu phúc đáp phù hợp với trạng thái Hội thoại hai tầng đồng mức độc lập với hội thoại tầng đồng mức khác Hội thoại hai tầng đồng mức quan niệm dòng liệu thực tế Xây dựng DLL Winsock Toàn dòng thông tin mạng Platform Windows chuyển qua Winsock Vấn đề đặt làm để khống chế đợc dòng thông tin để phục vụ cho mục tiêu riêng biệt Can thiệp trực tiếp vào Modul Winsock việc làm khó thực đợc ngời phát triển ứng dụng Winsock nh mét chiÕc hép ®en Chóng ta chØ cã thĨ biÕt đợc giao diện với Winsock mà Vậy cách tiếp cận nh Chúng tiếp cận theo kiểu xây dựng API Windows Socket API Dòng thông tin trớc chuyển qua Winsock qua tầng ta xây dựng tầng khống chế đợc dòng thông tin m¹ng MS Windows New API message filter Task A Task B New API DLL Winsock DLL Dòng thông tin với New API DLL Khi xây dựng tầng tầng Winsock có nhiều kỹ thuật phải giải Một kỹ thuật cần phải quan tâm xử lý message đợc gửi từ Winsock cho ứng dụng Nếu không chặn đợc dòng message điều khiển đợc trình truyền thông ứng dụng client phần ứng dụng server Chẳng hạn ta chèn thêm packet vào dòng packet ứng dụng Nếu ta không xử lý đợc message gửi từ Winsock cho ứng dụng hầu nh chắn connection già client server bị huỷ bỏ trình trao đổi thông tin client server bị huỷ chừng Kỹ thuật đợc chọn xử lý sử dụng kỹ thuật subclass Mục tiêu chặn toàn message gửi từ Winsock cho ứng dụng, xử lý message cần thiết trả lại message cđa øng dơng cho øng dơng xư lý Sự liên kết Client Server mô hình Winsock Để socket Client Server giao tiếp đợc với chúng phải có kiểu Các ứng dụng Client phải có khả xác định nhận socket server ứng dụng server đặt tên socket thiết lập đặc tính để nhận diện Do mà client tham chiếu Mỗi tên socket cho TCP/IP bao gồm địa IP, số hiệu cổng nh giao thức Client sử dụng hàm dịch vụ Windows Socket để tìm số hiệu cổng server, địa IP server biết đợc tên server Khi client socket liên hệ thành công với server socket hai tên chúng kết hợp lại để tạo thành liên kết Mỗi liên kết có thành phần sau: ã Giao thức, ã Địa IP Client, ã Số hiệu cổng Client, ã Địa IP Server, ã Số hiệu cổng Server Khi socket đợc mở, có đặc tính cha đầy đủ Để hoàn tất đặc tính nó, ứng dụng mạng phải gán cho tên liên kết với socket khác Các phép toán send receive socket giống với phép toán read write tới file Khi close socket có nghĩa giải phóng khỏi ứng dụng trả cho hệ thống để sử dụng cho việc khác Socket điểm cuối liên kết truyền thông, đợc tạo phần mềm cho phép ứng dụng mạng đăng nhập vào mạng Cả client server đòi hỏi socket để truy nhập mạng Mở socket thông qua gọi hàm socket() có khai báo hàm nh sau: SOCKET PASCAL FAR socket(int af, int type, int protocol); /*Bé giao thøc*/ /*kiĨu giao thøc*/ /*tªn giao thøc*/ øng dơng Windows socket socket() socket handle Protocol local IP address remote IP address local port 5.remote port Server cần phải chuẩn bị socket để nhận liệu client cần chuẩn bị socket để gửi liệu Khi việc chuẩn bị xong tạo liên kết socket client server Mỗi liên kết mạng Khi liên kết socket đợc thiết lập có nghĩa client server nhận diện đợc trao đổi liệu đợc với Các trạng thái socket Trong phần trình bầy phơng pháp khác phát trạng thái thời cuả socket phép chuyển tới trạng thái Trạng thái thời socket xác định phép toán mạng đợc tiếp tục, phép toán bị treo lại phép toán mạng bị huỷ Mỗi socket có số hữu hạn trạng thái winsock API định nghĩa điều kiện cho phép chuyển kiện mạng lời gọi hµm cđa øng dơng Cã hai kiĨu socket: datagram socket stream socket Mỗi kiểu socket có trạng thái phép chuyển khác 4.1 Các trạng thái socket kiểu datagram Sơ đồ trạng thái socket kiĨu datagram cã thĨ biĨu diƠn h×nh sau MD5STEP(F4(b,c,d), a, b, c, d, in[0] + 0xf4292244L, 6); MD5STEP(F4(a,b,c), d, a, b, c, in[7] + 0x432aff97L, 10); MD5STEP(F4(d,a,b), c, d, a, b, in[14] + 0xab9423a7L, 15); MD5STEP(F4(c,d,a), b, c, d, a, in[5] + 0xfc93a039L, 21); MD5STEP(F4(b,c,d), a, b, c, d, in[12] + 0x655b59c3L, 6); MD5STEP(F4(a,b,c), d, a, b, c, in[3] + 0x8f0ccc92L, 10); MD5STEP(F4(d,a,b), c, d, a, b, in[10] + 0xffeff47dL, 15); MD5STEP(F4(c,d,a), b, c, d, a, in[1] + 0x85845dd1L, 21); MD5STEP(F4(b,c,d), a, b, c, d, in[8] + 0x6fa87e4fL, 6); MD5STEP(F4(a,b,c), d, a, b, c, in[15] + 0xfe2ce6e0L, 10); MD5STEP(F4(d,a,b), c, d, a, b, in[6] + 0xa3014314L, 15); MD5STEP(F4(c,d,a), b, c, d, a, in[13] + 0x4e0811a1L, 21); MD5STEP(F4(b,c,d), a, b, c, d, in[4] + 0xf7537e82L, 6); MD5STEP(F4(a,b,c), d, a, b, c, in[11] + 0xbd3af235L, 10); MD5STEP(F4(d,a,b), c, d, a, b, in[2] + 0x2ad7d2bbL, 15); MD5STEP(F4(c,d,a), b, c, d, a, in[9] + 0xeb86d391L, 21); #else MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); 57 MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); #endif buf[0] += a; buf[1] += b; buf[2] += c; buf[3] += d; } 58 #endif static uint16 mul(register uint16 a, register uint16 b) { register word32 p; p = (word32) a *b; if (p) { b = low16(p); a = p >> 16; return (b - a) + (b < a); } else if (a) { return - a; } else { return - b; } } static uint16 mulInv(uint16 x) { uint16 t0, t1; uint16 q, y; if (x > 8) | (x1 > 8) | (x2 > 8) | (x3 > 8) | (x4 > 8) | (x1 > 8) | (x3 > 8) | (x2 > 8) | (x4 iv, iv, 8); else fill0(context->iv, 8); context->bufleft = 0; } void ideaCfbInit(struct IdeaCfbContext *context, byte const key[16]) { ideaExpandKey(key, context->key); ideaCfbReinit(context, 0); } void ideaCfbDestroy(struct IdeaCfbContext *context) 62 { burn(*context); } void ideaCfbSync(struct IdeaCfbContext *context) { int bufleft = context->bufleft; if (bufleft) { memmove(context->iv + bufleft, context->iv, - bufleft); memcpy(context->iv, context->oldcipher + - bufleft, bufleft); context->bufleft = 0; } } void ideaCfbEncrypt(struct IdeaCfbContext *context, byte const *src, byte * dest, int count) { int bufleft = context->bufleft; byte *bufptr = context->iv + - bufleft; if (count bufleft = bufleft - count; while (count ) { *dest++ = *bufptr++ ^= *src++; } return; } count -= bufleft; while (bufleft ) { *dest++ = (*bufptr++ ^= *src++); } while (count > 8) { bufptr = context->iv; memcpy(context->oldcipher, bufptr, 8); ideaCipher(bufptr, bufptr, context->key); bufleft = 8; count -= 8; { *dest++ = (*bufptr++ ^= *src++); } while ( bufleft); } bufptr = context->iv; memcpy(context->oldcipher, bufptr, 8); ideaCipher(bufptr, bufptr, context->key); 63 context->bufleft = - count; { *dest++ = (*bufptr++ ^= *src++); } while ( count); } void ideaCfbDecrypt(struct IdeaCfbContext *context, byte const *src, byte * dest, int count) { int bufleft = context->bufleft; static byte *bufptr; byte t; bufptr = context->iv + (8 - bufleft); if (count bufleft = bufleft - count; while (count ) { t = *bufptr; *dest++ = t ^ (*bufptr++ = *src++); } return; } count -= bufleft; while (bufleft ) { t = *bufptr; *dest++ = t ^ (*bufptr++ = *src++); } while (count > 8) { bufptr = context->iv; memcpy(context->oldcipher, bufptr, 8); ideaCipher(bufptr, bufptr, context->key); bufleft = 8; count -= 8; { t = *bufptr; *dest++ = t ^ (*bufptr++ = *src++); } while ( bufleft); } bufptr = context->iv; memcpy(context->oldcipher, bufptr, 8); ideaCipher(bufptr, bufptr, context->key); context->bufleft = - count; { t = *bufptr; *dest++ = t ^ (*bufptr++ = *src++); 64 } while ( count); } int idea_en_file(unsigned char *pw,unsigned char *str,unsigned int lenstr) { int status = 0; byte textbuf[5000],ideakey[24]; struct IdeaCfbContext cfb; memcpy(textbuf,str,lenstr); mdstr(pw,ideakey); ideaCfbInit(&cfb, ideakey); ideaCfbSync(&cfb); ideaCfbEncrypt(&cfb, textbuf, textbuf, lenstr); ideaCfbDestroy(&cfb); memcpy(str,textbuf,lenstr); burn(textbuf); return status; } int idea_de_file(unsigned char *pw,unsigned char *str,unsigned int lenstr) { int status = 0; byte textbuf[5000],ideakey[16]; struct IdeaCfbContext cfb; memcpy(textbuf,str,lenstr); mdstr(pw,ideakey); ideaCfbInit(&cfb, ideakey); ideaCfbDecrypt(&cfb, textbuf, textbuf, lenstr); ideaCfbDestroy(&cfb); memcpy(str,textbuf,lenstr); burn(textbuf); return status; } #include #include #include #include #include #include #include #define #define typedef typedef typedef typedef c 199 c1 unsigned char BYTE; unsigned int Word; BYTE so[c+1]; so mang[c1+1]; 65 typedef char xau[50]; BYTE io[c1+1]={66,34,18,10,6,4}; mang KEO; so modulo,somu,mamkhoa; int behon(BYTE* x,BYTE* y) { int i; } if (x[c]!=y[c]) return (x[c]0)) i ; return (x[i]0) i ; x[c]=i; void cong(BYTE* x, BYTE* y) { int i,t=0,j; } j = x[c]>y[c] ? x[c] : y[c]; for (i=0;i256){ x[i]=(BYTE)(t-256); t=1; } else{ x[i]=(BYTE)t; t=0; } } x[c]=j; void tru(BYTE* x, BYTE* y) { int i,t=0; for (i=0;i0) { y[i++]=nho; } y[c]=i-1; void nhan_word(BYTE *x, BYTE *y, Word k) { BYTE i; so z,w; } nhan_byte(x,y,(BYTE)k); i = k >> 8; if (i==0) return; nhan_byte(x,z,i); dich_trai(z,w,1); cong(y,w); void nhan(BYTE* x, BYTE* y) { Word /*register*/ i,k; Word j,r; unsigned long t1,t=0; BYTE *a,*b; so w; memset(w,0,c+1); a=x; b=y; 67 } if (x[c]>y[c]) { a=y; b=x; } for (i=0;i= 8; } for (i=a[c]+1;i= 8; } for (i=b[c]+1;i= 8; } w[i++]= t; t >>= 8; w[i++]= t; dodai(w); memcpy(x,w,c+1); void binh_fuong(BYTE *x) { Word /*register*/ i,k; Word r,s,t1; long t=0; so w; memset(w,0,c+1); t=x[0]; t=t*t; w[0]=(BYTE)t; t >>= 8; for (i=1;i> 1; if ((i & 1) == 0){ 68 t1 = x[s]; t += t1*t1; s ; } for (k=0;k>= 8; } } for (i=x[c]+1; i > 1; if ((i & 1) == 0){ t1 = x[s]; t += t1 * t1; s ; } for (k=i-x[c];k>= 8; } w[i++]= (BYTE)t; t >>= 8; w[i++]= t; dodai(w); memcpy(x,w,c+1); void du(BYTE *x, BYTE *n) { unsigned long l; int i; BYTE dn; Word a,q,an; so v,w; dn=n[c]; an=n[dn]; an

Ngày đăng: 05/06/2021, 20:40

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

TÀI LIỆU LIÊN QUAN

w