Đề tài Mô phỏng chương trình chữ kí số elgamal trên văn bản điện tử

Một vấn đề đặt ra là ta không nên áp sơ đồ ký số vào một thông báo dài . Nhưng thông báo thì phải được kí , mâu thuẫn này có thể giải quyết được bằng cách sử dụng hàm Hash , vì hàm Hash là một công cụ tóm lược đặc trưng của thông báo rất an toàn và hữu hiệu .

Với một thông báo có độ dài M bất kỳ . Hàm Hash cho ra giá trị tóm lược thông báo có độ dài không đổi, nói chung giá trị tóm lược thông báo có độ dài nhỏ hơn thông báo M rất nhiều . Chẳng hạn | H(M) | = 128 bít hoặc | H(M) | =160 bít trong khi đó thông báo có độ dài cỡ Mega byte hay lớn hơn. Do vậy đặc tính cơ bản của hàm Hash là đưa ra một giá trị đại diện của thông báo M rất ngắn so với thông báo .

Sau khi đã tóm lược thông báo M được một tóm lược H(M) người ta dùng chữ ký số áp vào H(M) . Thông báo M cùng với tóm H(M) đã được ký sẽ được gói trọn trong một thông báo và được mã hoá theo cách thông thường để truyền đi. Người nhận được thông báo có thể chứng thực chữ ký tóm lược H(M) sau đó dùng hàm Hash tính lại tóm lược với thông báo vừa nhận được và so sánh kết quả. Khi đó cùng một lúc có thể xác thực được người gửi và cả sự nguyên vẹn của thông báo M .

 

doc45 trang | Chia sẻ: oanh_nt | Lượt xem: 1015 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Đề tài Mô phỏng chương trình chữ kí số elgamal trên văn bản điện tử, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
CHƯƠNG III MÔ PHỎNG CHƯƠNG TRÌNH CHỮ KÍ SỐ ELGAMAL TRÊN VĂN BẢN ĐIỆN TỬ Như ta đã biết một sơ đồ chữ kí số thường chứa 2 thành phần đó là thuật toán ký và thuật toán xác minh . Trong chương này em xin trình bày về hàm Hash đơn giản là hàm tóm lược văn bản và ký số lên file văn bản , nhằm bảo toàn tính nguyên vẹn của văn bản . I. Hàm HASH và việc tóm lược thông báo. Một vấn đề đặt ra là ta không nên áp sơ đồ ký số vào một thông báo dài . Nhưng thông báo thì phải được kí , mâu thuẫn này có thể giải quyết được bằng cách sử dụng hàm Hash , vì hàm Hash là một công cụ tóm lược đặc trưng của thông báo rất an toàn và hữu hiệu . Với một thông báo có độ dài M bất kỳ . Hàm Hash cho ra giá trị tóm lược thông báo có độ dài không đổi, nói chung giá trị tóm lược thông báo có độ dài nhỏ hơn thông báo M rất nhiều . Chẳng hạn | H(M) | = 128 bít hoặc | H(M) | =160 bít trong khi đó thông báo có độ dài cỡ Mega byte hay lớn hơn. Do vậy đặc tính cơ bản của hàm Hash là đưa ra một giá trị đại diện của thông báo M rất ngắn so với thông báo . Sau khi đã tóm lược thông báo M được một tóm lược H(M) người ta dùng chữ ký số áp vào H(M) . Thông báo M cùng với tóm H(M) đã được ký sẽ được gói trọn trong một thông báo và được mã hoá theo cách thông thường để truyền đi. Người nhận được thông báo có thể chứng thực chữ ký tóm lược H(M) sau đó dùng hàm Hash tính lại tóm lược với thông báo vừa nhận được và so sánh kết quả. Khi đó cùng một lúc có thể xác thực được người gửi và cả sự nguyên vẹn của thông báo M . II. Mô tả chương trình chữ kí số Elgamal trên một file văn bản bất kỳ M. -Đầu tiên ta mở file văn bản (M) cần kí , sau đó dùng hàm Hash để tóm lược lại văn bản ta được H(M). Hàm Hash sau đây sẽ sử dụng là ta sẽ chia văn bản M ra làm nhiều khối , mỗi khối là 40 byte . Sau đó ta sẽ đọc từng 40 byte văn bản của từng khối gán bằng 1 byte mã. Nếu khối văn bản cuối cùng không đủ 40 byte thì ta sẽ cho đọc riêng số lượng byte đó thành 1 byte mã. Đoạn chương trình sau được viết bằng Pascal mô tả một trong những cách tóm lược văn bản qua hàm Hash. procedure tom_luoc(st:ten_file); var l,m,n,i,j:longint; kq:word; dem:sl; begin fillchar(hash,max_sl,0); assign(f,st); reset(f,1); l:=filesize(f); m:=l div 40; n:=l mod 40; for i:=1 to m do begin blockread(f,dem,40,kq); for j:=0 to 39 do hash[j]:=hash[j] xor dem[j]; end; if (n>0) then begin blockread(f,dem,n,kq); for j:=0 to n-1 do hash[j]:=hash[j] xor dem[j]; end; close(f); end; -Sau khi tóm lược được, ta dùng chương trình ký cùng với phần tóm lược để ký lên văn bản đã nhập . Cuối cùng sẽ ghi toàn bộ văn bản và chữ kí số lên file ký . -Đầu tiên ta mở file văn bản cần kiểm tra chữ ký số , sau đó ta lại dùng hàm Hash để tóm lược lại văn bản, sau đó đưa kết quả vào để kiểm tra chữ kí trên văn bản -Quá trình kí và kiểm tra chữ kí thể hiện qua 2 sơ đồ sau: Sơ đồ quá trình kí lên văn bản M: M M Công Khai Chữ ký 1 Chữ ký 2 Chương Trình ký số Tóm lược M Sơ đồ quá trình kiểm tra chữ ký trên văn bản M: M Công Khai Chữ Ký 1 Chữ Ký 2 Chương trình Kiểm Tra Tóm lược M Sau đây là chương trình mô phỏng Sơ đồ chữ kí Elgamal: Khi chạy chương trình ta cần chú ý những điểm sau: -Khi hiển thị lựa chọn thì ta nhập “ky” để chọn ký lên văn bản, chương trình sẽ bắt ta nhập tên file cần ký và file ký vào. Sau khi ký xong chương trình sẽ trở lại ngay menu chính. ta nhập “ kiem tra“ để chọn kiểm tra văn bản có chữ ký, ta sẽ phải nhập vào tên file cần kiểm tra, và chon “thoat” để thoát khỏi chương trình. { Chuong trinh chu ky so Elgama } uses crt,dos,graph; var det,ycolet,gra:integer; hd,td,cao,rto,rbe,ro,culy,day:word; kichthuoc,tyle,heso,doday,mauchu:byte; procedure cochu; begin ro:=kichthuoc; rbe:=2*ro; rto:=2*rbe; cao:=2*rto; culy:=11*kichthuoc; end; procedure cach; begin hd:=hd+4*(kichthuoc+1); end; procedure xuongdong; begin hd:=8*kichthuoc; day:=day+25*kichthuoc; end; procedure batdau; begin hd:=8*kichthuoc; day:=20*kichthuoc; end; procedure phay; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; ellipse(hd-rto,td+rto,270,360,ro,rbe); end; hd:=xi;td:=yi; hd:=hd+4*ro; end; procedure sac; var xi,yi,si,ji:word; begin td:=day-rto; hd:=hd-culy; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; ellipse(hd,td-cao-ro,270,360,ro,rbe); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure huyen; var xi,yi,si,ji:word; begin td:=day-rto; hd:=hd-culy; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; ellipse(hd,td-cao-ro,180,270,ro,rbe); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure hoi; var xi,yi,si,ji:word; begin td:=day-rto; hd:=hd-culy; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; arc(hd,td-cao-ro,270,360,rbe); arc(hd+ro,td-cao-ro,0,270,ro); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure nga; var xi,yi,si,ji:word; begin td:=day-rto; hd:=hd-culy; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; arc(hd+ro,td-cao,180,360,ro); arc(hd-ro,td-cao,0,180,ro); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure nang; begin td:=day-rto; hd:=hd-culy; if doday=1 then circle(hd-ro div 2,td+rto+rbe,ro) else circle(hd-ro,td+cao-ro,ro+ro div 2); setfillstyle(1,mauchu); floodfill(hd-ro+1,td+cao-ro-1,mauchu); hd:=hd+culy; end; procedure mu; var xi,yi,si,ji:word; begin td:=day-rto; hd:=hd-culy; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; ellipse(hd,td-cao+rbe+ro,0,180,rbe,ro); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_aw; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; circle(hd,td,rto); line(hd+rto,td-rto,hd+rto,td+rto); ellipse(hd,td-cao+rbe,180,360,rbe,ro); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_a; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; circle(hd,td,rto); line(hd+rto,td-rto,hd+rto,td+rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_b; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; circle(hd,td,rto); line(hd-rto,td-cao,hd-rto,td+rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_c; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; arc(hd,td,30,330,rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_d; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; circle(hd,td,rto); line(hd+rto,td-cao,hd+rto,td+rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_de; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; circle(hd,td,rto); line(hd+rto,td-cao,hd+rto,td+rto); end; hd:=xi; for ji:=0 to doday div 2 do begin td:=yi-ji*tyle; if doday=1 then line(hd+rto+ro,td-cao+rbe,hd+rbe,td-cao+rbe) else line(hd+rto+ro,td-cao+rbe,hd+ro,td-cao+rbe); end; td:=yi; hd:=hd+culy; end; procedure chu_e; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; arc(hd,td,30,330,rto); line(hd-rto,td,hd+rbe+ro,td-rbe); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_f; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; circle(hd+ro,td-ro,ro); line(hd-rto,td-ro,hd-rto,td+cao+rbe); arc(hd-ro,td-ro,0,180,rbe+ro); line(hd-rto-rbe,td+cao-rbe,hd-rto+rbe,td+rto); end; hd:=xi;td:=yi; hd:=hd+9*kichthuoc; end; procedure chu_g; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; circle(hd,td,rto); line(hd+rto,td-rto,hd+rto,td+cao-rbe); arc(hd,td+rto+rbe,180,360,rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_h; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-cao,hd-rto,td+rto); line(hd+rto,td,hd+rto,td+rto); arc(hd,td,0,180,rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_i; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-rto,hd-rto,td+rto); circle(hd-rto,td-rto-rbe,(doday+kichthuoc) div 4); end; hd:=xi;td:=yi; hd:=hd+culy div 3; end; procedure chu_isac; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-rto,hd-rto,td+rto); ellipse(hd-rbe,td-cao-ro,270,360,ro,rbe); circle(hd-rto,td-rto-rbe,(doday+kichthuoc) div 4); end; hd:=xi;td:=yi; hd:=hd+culy div 3; end; procedure chu_ihuyen; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-rto,hd-rto,td+rto); ellipse(hd-rbe,td-cao-ro,180,270,ro,rbe); circle(hd-rto,td-rto-rbe,(doday+kichthuoc) div 4); end; hd:=xi;td:=yi; hd:=hd+culy div 3; end; procedure chu_ihoi; var xi,yi,si,ji:word; begin td:=day-rto;xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-rto,hd-rto,td+rto); arc(hd-rbe-ro,td-cao-ro,270,360,rbe); arc(hd-rbe,td-cao-ro,0,270,ro); circle(hd-rto,td-rto-rbe,(doday+kichthuoc) div 4); end; hd:=xi;td:=yi; hd:=hd+culy div 3; end; procedure chu_inga; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-rto,hd-rto,td+rto); arc(hd-rbe,td-cao,180,360,ro); arc(hd-rto,td-cao,0,180,ro); circle(hd-rto,td-rto-rbe,(doday+kichthuoc) div 4); end; hd:=xi;td:=yi; hd:=hd+culy div 3; end; procedure chu_inang; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-rto,hd-rto,td+rto); circle(hd-rto,td+rto+rbe,(doday+kichthuoc) div 4); circle(hd-rto,td-rto-rbe,(doday+kichthuoc) div 4); end; hd:=xi;td:=yi; hd:=hd+culy div 3; end; procedure chu_j; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rbe,td-rto,hd-rbe,td+cao); arc(hd-rto,td+cao,180,360,rbe); circle(hd-rbe,td-rto-rbe,(doday+kichthuoc) div 4); end; hd:=xi;td:=yi; hd:=hd+culy div 3; end; procedure chu_k; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; ellipse(hd-rto,td-rto,270,360,cao,rto); ellipse(hd+rto,td,90,180,cao,rto); ellipse(hd+rto+ro,td-rbe,197,270,cao-ro,rto+rbe); line(hd-rto,td-cao,hd-rto,td+rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_l; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-cao,hd-rto,td+rbe); arc(hd-rbe,td+rbe,180,360,rbe); end; hd:=xi;td:=yi; hd:=hd+7*kichthuoc; end; procedure chu_m; var xi,yi,si,ji:word; begin td:=day-rto;xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-rto,hd-rto,td+rto); line(hd+rbe,td-ro,hd+rbe,td+rto); line(hd+cao,td-ro,hd+cao,td+rto); arc(hd-ro,td-ro,0,180,rto-ro); arc(hd+rto+ro,td-ro,0,180,rto-ro); end; hd:=xi;td:=yi; hd:=hd+15*kichthuoc; end; procedure chu_n; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-rto,hd-rto,td+rto); line(hd+rto,td,hd+rto,td+rto); arc(hd,td,0,180,rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_o; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; circle(hd,td,rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_ow; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; circle(hd,td,rto); arc(hd+rto-ro,td-rto-rbe,270,360,rbe); arc(hd+rto,td-rto-rbe,0,270,ro); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_p; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-rto,hd-rto,td+cao); circle(hd,td,rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_q; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd+rto,td-rto,hd+rto,td+cao); circle(hd,td,rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_s; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; ellipse(hd-ro,td-rbe,0,90,ro+rto,rbe); ellipse(hd+ro,td+rbe,180,270,ro+rto,rbe); arc(hd-rbe,td-rbe,90,207,rbe); arc(hd+rbe,td+rbe,270,390,rbe); line(hd-rbe-ro-ro div 2,td-ro,hd+rbe+ro+ro div 2,td+ro); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_r; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-rto,hd-rto,td+rto); arc(hd,td,30,180,rto); end; hd:=xi;td:=yi; hd:=hd+culy-kichthuoc; end; procedure chu_t; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td+rbe,hd-rto,td-cao); arc(hd-rbe,td+rbe,180,360,rbe); end; hd:=xi; for ji:=0 to doday div 2 do begin td:=yi-ji*tyle; if doday=1 then line(hd-rto-rbe,td-cao+rbe,hd-rbe-ro,td-cao+rbe) else line(hd-cao+ro,td-cao+rbe,hd-rbe-ro,td-cao+rbe); end; td:=yi; hd:=hd+7*kichthuoc; end; procedure chu_uw; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-rto,hd-rto,td); line(hd+rto,td-rto,hd+rto,td+rto); arc(hd,td,180,360,rto); arc(hd+rto+ro,td-rto-rbe,270,360,rbe); arc(hd+rto+rbe,td-rto-rbe,0,270,ro); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_u; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-rto,hd-rto,td); line(hd+rto,td-rto,hd+rto,td+rto); arc(hd,td,180,360,rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_v; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-rto,hd-rbe,td+rto); ellipse(hd-rbe,td-rto,270,360,rto+rbe,cao); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_x; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; arc(hd-rto,td,270,450,rto); arc(hd+rto,td,90,270,rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chu_y; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,td-rto,hd-rto,td); line(hd+rto,td-rto,hd+rto,td+cao); arc(hd,td,180,360,rto); arc(hd,td+cao,180,360,rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure khong; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; td:=td-rto-rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; ellipse(hd,td+rto,0,360,rto,rto+rbe); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chamthan; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; td:=td-rto-rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; circle(hd-rto,td+cao+ro,ro); line(hd-rto,td-rbe,hd-rto,td+cao-rbe); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure haicham; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; td:=td-rto-rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; circle(hd-rto,td+cao+ro,ro); circle(hd-rto,td+rbe,ro); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure tam; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; td:=td-rto-rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; ellipse(hd,td,0,360,rbe+ro,rbe); ellipse(hd,td+cao-rbe,0,360,rto,rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure ba; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; td:=td-rto-rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; ellipse(hd,td,270,540,rbe+ro,rbe); ellipse(hd,td+cao-rbe,200,450,rto,rto); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure chin; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; td:=td-rto-rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; ellipse(hd,td+rbe,0,360,rto,rto); ellipse(hd,td+cao-rbe,200,360,rto,rto); line(hd+rto,td+rbe,hd+rto,td+cao-rbe); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure hai; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; td:=td-rto-rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; ellipse(hd,td+rbe,0,160,rto,rto); line(hd-rbe-ro div 6,td+cao+ro div 2,hd-rbe+ro div 2,td+cao+ro+ro div 6); ellipse(hd-rbe-ro,td+rbe,270,360,cao-ro,cao); arc(hd-rto+ro,td+cao+ro,35,270,ro); ellipse(hd+ro,td+cao,210,350,rto-ro,rbe); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure nam; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; td:=td-rto-rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; ellipse(hd,td+cao-rbe,200,450,rto,rto); line(hd-rto+ro,td-rbe,hd-rto,td+rbe); line(hd-rto+ro,td-rbe+1,hd+rto-ro,td-rbe+1); line(hd-rto+ro,td-rbe,hd+rto-ro,td-rbe); line(hd-rto,td+rbe+1,hd,td+rbe+1); line(hd-rto,td+rbe,hd,td+rbe); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure sau; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; td:=td-rto-rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; ellipse(hd,td+cao-rbe,0,360,rto,rto); ellipse(hd,td+rbe,20,180,rto,rto); line(hd-rto,td+rbe,hd-rto,td+cao-rbe); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure mot; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; td:=td-rto-rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; ellipse(hd-rto-ro,td-rbe,270,360,rbe,rbe); line(hd-rto+ro,td-rbe,hd-rto+ro,td+cao+rbe); end; hd:=xi;td:=yi; hd:=hd+culy div 2; end; procedure bay; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; td:=td-rto-rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd+ro,td-rbe,hd-rto,td+cao+rbe); line(hd+ro,td-rbe,hd-rto,td-rbe); line(hd+ro,td-rbe+1,hd-rto,td-rbe+1); line(hd+ro,td-rbe+2,hd-rto,td-rbe+2); end; hd:=xi;td:=yi; hd:=hd+8*kichthuoc; end; procedure bon; var xi,yi,si,ji:word; begin td:=day-rto; xi:=hd;yi:=td; td:=td-rto-rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd+ro,td-rbe,hd+ro,td+cao+rbe); line(hd+rbe,td+cao-rbe,hd-rto,td+cao-rbe); line(hd+rbe,td+cao-rbe+1,hd-rto,td+cao-rbe+1); line(hd+rbe,td+cao-rbe+2,hd-rto,td+cao-rbe+2); line(hd-rto,td+cao-rbe,hd+ro,td-rbe); end; hd:=xi;td:=yi; hd:=hd+culy; end; procedure a_hoa; var xi,yi,si,ji:word; begin xi:=hd;yi:=day-3*rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd,day-3*rto,hd+rto,day); line(hd,day-3*rto,hd-rto,day); end; for ji:=0 to (doday*tyle) div 2 do begin td:=yi+ji*tyle; line(hd-rbe+ji,td,hd+rbe+ji*tyle,td); end; hd:=xi; hd:=hd+culy+kichthuoc; end; procedure b_hoa; var xi,yi,si,ji,zi:word; begin xi:=hd;yi:=day-3*rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,day-3*rto,hd-rto,day); ellipse(hd-rto,day-9*ro,270,450,cao,rto-ro-ji*tyle div 2); ellipse(hd-rto,day-3*ro,270,450,cao,rto-ro-ji*tyle div 2); end; hd:=xi; hd:=hd+culy+kichthuoc; end; procedure c_hoa; var xi,yi,si,ji,zi:word; begin xi:=hd;yi:=day-3*rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin ellipse(hd-(doday*tyle) div 2,day-3*rbe,30,330, rto+ro div 2-ji*tyle,rto+rbe-ji*tyle div 2); end; hd:=xi; hd:=hd+culy+kichthuoc; end; procedure d_hoa; var xi,yi,si,ji,zi:word; begin xi:=hd;yi:=day-3*rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,day-3*rto,hd-rto,day); ellipse(hd-rto,day-3*rbe,270,450,cao,rto+rbe-ji*tyle div 2); end; hd:=xi; hd:=hd+culy+kichthuoc; end; procedure de_hoa; var xi,yi,si,ji,zi:word; begin xi:=hd;yi:=day-3*rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; zi:=tyle*doday; line(hd-rto,day-3*rto,hd-rto,day); line(hd-rto-rbe-ro+ji*tyle,day-3*rbe-ji*tyle+(tyle*doday) div 2, hd-rbe-ro+ji*tyle,day-3*rbe-ji*tyle+(tyle*doday) div 2); ellipse(hd-rto,day-3*rbe,270,450,cao,rto+rbe-ji*tyle div 2); end; hd:=xi; hd:=hd+culy+kichthuoc; end; procedure e_hoa; var xi,si,ji:word; begin xi:=hd; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,day-3*rto,hd-rto,day); line(hd-rto+ji*tyle,day-3*rbe-ji*tyle+(doday*tyle) div 2, hd+ji*tyle,day-3*rbe-ji*tyle+(doday*tyle) div 2); line(hd-rto+ji*tyle,day-ji*tyle,hd+rto+ji*tyle,day-ji*tyle); line(hd-rto+ji*tyle,day-3*rto+ji*tyle,hd+rto+ji*tyle,day-3*rto+ji*tyle); end; hd:=xi; hd:=hd+culy+kichthuoc; end; procedure g_hoa; var xi,yi,si,ji,zi:word; begin xi:=hd;yi:=day-3*rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin ellipse(hd-(doday*tyle) div 2,day-3*rbe,30,360, rto+ro div 2-ji*tyle,rto+rbe-ji*tyle div 2); line(hd,day-3*rbe-ji*tyle+(doday*tyle) div 2, hd+rto,day-3*rbe-ji*tyle+(doday*tyle) div 2); end; hd:=xi; hd:=hd+culy+kichthuoc; end; procedure h_hoa; var xi,si,ji:word; begin xi:=hd; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd+rto,day-3*rto,hd+rto,day); line(hd-rto,day-3*rto,hd-rto,day); line(hd-rto,day-3*rbe-ji*tyle+(doday*tyle) div 2, hd+rto,day-3*rbe-ji*tyle+(doday*tyle) div 2); end; hd:=xi; hd:=hd+culy+kichthuoc; end; procedure i_hoa; var xi,si,ji:word; begin xi:=hd; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,day-3*rto,hd-rto,day); end; hd:=xi; hd:=hd+4*kichthuoc; end; procedure k_hoa; var xi,yi,si,ji,zi:word; begin xi:=hd;yi:=day-3*rbe; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,day-3*rto,hd-rto,day); line(hd-rto,day-3*rbe,hd+rto,day); line(hd-rto,day-3*rbe,hd+rto,day-3*rto); end; hd:=xi; hd:=hd+culy+kichthuoc; end; procedure l_hoa; var xi,si,ji:word; begin xi:=hd; si:=1; if doday=3 then si:=2; for ji:=0 to doday do begin hd:=xi-ji*tyle; line(hd-rto,day-ji*tyle,hd+rto+ji*tyle,day-ji*tyle); line(hd-rto,day-3*rto,hd-rto,day); end; hd:=xi; hd:=hd+culy+kichthuoc; end; procedure m_hoa; var xi,si,ji:word; begin xi:=

Các file đính kèm theo tài liệu này:

  • docBLT-CKS3.doc
Tài liệu liên quan