🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.program
Article #1190

ZIP������ⷨ

#1190
From: ���ܵ�Сʨ
Date: Sat, 18 Apr 1998 00:00
138 lines
8525 bytes
 ZIP�ļ��������ʽ
    ���ļ�ͷ��Ϣ+�ļ�ѹ�����
    ����Ŀ¼+����Ŀ¼��¼�����

    1.���ļ�ͷ��Ϣ:
      �ֽ��� ����
      4      ���ļ�ͷ��Ϣ��־(0x04034b50)
      2      ��ѹ������汾
      2      ͨ�ñ��ر�־λ(�ñ���0λ=����;�ñ���1λ=ʹ��ѹ
����ʽ6,��ʹ��8k�仯Ŀ¼,����ʹ��4k�仯Ŀ¼;�ñ���2λ=ʹ��ѹ
����ʽ6,��ʹ��3��ShannonFano���Ա仯Ŀ¼�������,����ʹ��2��
ShannonFano���Ա仯Ŀ¼�������,�������λδ��)
      2      ѹ����ʽ(0=��ѹ��,1=��С,2=��ѹ������1��С,3=��
ѹ������2��С,4=��ѹ������3��С,5=��ѹ������4��С,6=��չ)
      2      �ļ�����޸�ʱ��
      2      �ļ�����޸�����
      4      32λУ����
      4      ѹ���ļ���С
      4      δѹ���ļ���С
      2      ���
      2      ��չ�γ�
      ?      ���(������)
      ?      ��չ��(������)

    2.����Ŀ¼�ṹ
      �ļ�ͷ��Ϣ...����Ŀ¼��¼�����
      �ļ�ͷ:
      �ֽ���   ����
      4        �����ļ�ͷ��Ϣ��־(0x02014b50)
      2        �������ϵͳ(��λ�ֽڱ�ʾ�������ϵͳ,��λ��
�ڱ�ʾZIPѹ������汾��,��ֵ����10��ʾ���汾��,��ֵģ10��ʾ
�ΰ汾�š�0=MS-DOS,OS/2 FAT�ļ�ϵͳ,1=Ami ga,2=VMS,3=Unix��
����,4=VM/CMS,5=AtariST,6=OS/2 HPFS,7=Macintosh,8=Z-System,9
=C P/M,10-255�)
      2        ��ѹ������汾
      2        ͨ�ñ��ر�־
      2        ѹ����ʽ
      2        �ļ�����޸�ʱ��(�ñ�׼��MS-DOSʱ���� �ڸ�ʽ
����)
      2        �ļ�����޸�����
      4        32λУ����(ʹ��David Schwaderer��CRC-32�㷨��
��)
      4        ѹ���ļ���С
      4        δѹ���ļ���С
      2        ���
      2        ��չ�γ�
      2        �ļ�ע�ͳ�(�ֱ�Ϊ�ļ���,��չ��,ע�� ��,С��
64K)
      2        ������ʼ��(���ļ��ڴ����е���ʼ��)
      2        �ڲ��ļ�����(���λ����1,��ʾΪASC�ı�,����Ϊ
���������,����λδ��)
      4        �ⲿ�ļ�����(�������������ϵͳ)
      4        ���ļ�ͷ���λ��
      ?        ���(������)
      ?        ��չ��(������,����δ����չ,�Ͱ汾Ϊ0��)
      ?        �ļ�ע��(������)

    3.����Ŀ¼��¼�����
      �ֽ���   ����
      4        ����Ŀ¼��ǽ����(0x06054b50)
      2        ���̺�(���а�������Ŀ¼�����¼)
      2        ��������Ŀ¼��ʼ��
      2        ��������Ŀ¼�������
      2        ����Ŀ¼�������(ZIP�ļ��е��ļ�����)
      2        �������Ŀ¼��С
      4        ������ʼ���̺ŵ�����Ŀ¼��ʼƫ��
      2        ZIP�ļ�ע�ͳ���
      ?        ZIP�ļ�ע��(������)

    ���ܷ���
    PKZIP��ʹ�õļ��ܷ�����Roger Schlafly�ṩ��ZIP�ļ��ڽ�ѹ
��ǰ�����Ƚ��ܡ�ÿ�������ļ�����һ��12�ֽڵļ����ļ�ͷ��չ��
Ϣ,�洢����������ʼλ��,����ǰ������һ����ʼֵ,Ȼ�����3
2λ����Կ���ܡ���Կ��ʹ�����ṩ�Ŀ����ʼ����12���ֽڼ���֮
��,��PKZIP��α��������,���PKZIP��ʹ��CRC-32�㷨����Կ
���и��¡�
    ����ʵʩ��Ϊ��:

    1.�ÿ�������32λ��Կ��ʼ����
    K(0)=305419896,K(1)=591751049,K(2)=878082192
    ѭ�� for i=0 to length(password)-1
    ���ø�����Կ���� update_keys(password(i))
    ����ѭ��(ѭ������ȴ�)
    ���и�����Կ����Ϊ:
    update_keys(char):
    Key(0)=crc32(key(0),char)
    Key(1)=Key(1)+(Key(0)& 000000ffH)
    Key(1)=Key(1)*134775813+1
    Key(2)=crc32(Key(2),Key(1)����24)
    end update_keys
    CRC32������,��һ��4�ֽڵ�CRCֵ��һ���ַ�,����һ����CRC
-32�㷨���µ�CRC������Ϊ:
    crc32(c,b)=crc32tab[(c^b)&0xff]^(c>>8),crc32tab[256]��ֵ
Ϊ�̶���256��4�ֽ���

    2.��ȡ������12�ֽڵļ���ͷ,�ٴζ���Կ���г�ʼ����
    ��12���ֽڵļ���ͷ���뻺����buffer(0)��buffer(11),ѭ��fo
r i=0 to 11
    C=buffer(i)^decrypt_byte()
    update_keys(C)
    buffer(i)=C
    ����ѭ��(ѭ��12��)
    ���е�decrypt_byte()����Ϊ:
    unsigned char decrypt_byte()
    local unsigned short temp
    temp=Key(2)|2
    decrypt_byte=((temp*(temp^1))>>8)&0xff
    end decrypt_byte
    �ò������,�����������Ķ����ֽ�buffer(10)��buffer(11)
����Ϊ�����ļ�У����Ķ������λ(��������˳����)����ZIP��
���ļ����н�ѹ��ǰ,PKUNZIP�����ʹ�����ṩ�Ŀ������������
����д���,�õ��Ľ����У����Ķ�����λ�ֽڽ��бȽ�,ֻ�е���
������ȷ�Ŀ���ʱ,���һ��,���ܽ��к���Ľ�ѹ�����,����,PKZI
P���������Ϣ,�����Զ�����

    3.��ȡѹ������������Լ�����Կ������м��ܡ�
    ѹ���������������̼���:
    ѭ�� ֱ�����������
    C=�������һ���ֽ�
    temp=C^decrypt_byte()
    update_keys(temp)
    ���temp
    ����ѭ��

    �������ȡ����
    ͨ�����������ֵ�����,����֪��:��Ϊ���ܹ���в����㷨����
Կ���ϸ���,�޷�ֱ��ʵʩ���ܵ�����(����),����ֻ��ֱ�ӹ�����
��,���������İ취,��У�������жϿ������ȷ��������
,����������,����,һ��ʹ���˴�СдӢ����ĸ(a-z,A-Z),����(0 -9
),�ͱ����(@#$%^&*()_+-[]{},��\"/?:;`')�������ĸ�Ŀ���,��
����Ϊ88��5��Ļ(Լ53��)�������ֻʹ����Сд��ĸ,���������Ϊ
һǧ��Ρ�����,��ȡZIP�Ŀ���,������ֻ�в��ֵijɹ��ʡ�ֻ����
Ϊ������ʹ�ÿ���ʱ����©��(��̿���,ֻ��Сд��ĸ,ֻ������,��
�����������),��ʹ��ȡZIP�������һ���ijɹ��ʡ�

--
�� ��Դ:���ϴ�С�ٺ���Ϣ����վ bbs.nju.edu.cn��[FROM: hsia.nju.edu.cn]
Technical Details
Message-ID: <3O9Qh2$tr9@bbs.nju.edu.cn>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB
X-Google-Thread: fc86e,465534aa4d7dc1b,start
X-Google-Attributes: gidfc86e,public
From: pipishi.bbs@bbs.nju.edu.cn (���ܵ�Сʨ)
Subject: ZIP������ⷨ
Date: 1998/04/18
Message-ID: <3O9Qh2$tr9@bbs.nju.edu.cn>
X-Deja-AN: 345308561
X-Filename: Programming/M.892871186.A
Organization: nju_bbs
Newsgroups: cn.bbs.comp.program