⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clsb64.cls

📁 快速Base64编码_解码引擎全部源程序
💻 CLS
📖 第 1 页 / 共 3 页
字号:
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "clsB64"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
' The original source code was from someone (AndrComm or Sebastien?) else.
' It's kinda unreadable (at least i'm the one who feel so, no offense).
' So i decided to recode the whole thing, but having reference to the original.
' Anyway thanks, whoever who are who wrote the original code (yeahh.. all creadits to him)
' since i learnt some performance optimization (my original codes are damn slow, sucks).
' I was so excited when i found that piece of code a few days ago and i work
' nonstop for 2 days and come out with my own.. kinda crazy, am i?
'
' I didn't make any major changes, just some code clean up and comments.
' The encode speed increased by 20%, decoded speed increased by 30%.
' In order to gain speed.. much of the safety checkups have been removed
' thus crashes more easily. Compile in NATIVE CODE to gain more speed.
' Check Project -> Base64 Properties -> Compile -> Advanced Optimizations.
'
' After running 15 times of test on my AMD K6-2 300Mhz 64mb Quantum FireBall HDD
' (kinda outdated :p) here's the average results that i come out with:
'
'   file : command.com (93,040 bytes)
'   load : 2.56 mb/sec (n/a in original code)
'   save : 3.39 mb/sec (n/a in original code)
' encode : 7.17 mb/sec (20% faster, original code runs at 6.05 mb/sec)
' decode : 7.31 mb/sec (30% faster, original code runs at 5.61 mb/sec)
'
' Here's the changes I've made :
'
' 1. *REWROTE* code clean up (i think it should be more readable)
' 2. *REWROTE* encode and decode table is created together.
' 3. *REWROTE* sub DECODE rewrote (should be faster).
' 4. *REWROTE* sub SPAN and UNSPAN now supports SpanSeparator.
' 5. *ADDED*   More detailed co1mments for novice, not experts
' 5. *ADDED*   some form controls, for input and output.
' 6. *ADDED*   file loading and saving feature
' 7. *FIXED*   encode / decode rate calculation fixed... more accurate
'              should be 1 sec = 1024 ticks (kernel 1044 ticks?)
'              and 1 mb = 1048576 bytes. (1024b x 1024b)
'
' and some other minor corrections as well...
' below are some useful details that i would like to share with others.
'
' P/s : someone please look at the load file sub? Too jerky and
'       i don't know how to optimize it...
'       Sorry if the lines are too long, i'm working in 1600x1200 environment
'
' Johnny (chinhuat@i.am, cknvally@tm.net.my)
' Friday, September 08, 2000
' 1418 GMT +0800
'
' (you may delete the shits above and redistribute, all credits to those guys not me)
'
' -------------------------------- snip snip snip --------------------------------
'
' ******************************************
' * Base64 Encode / Decode Algorythm Class *
' ******************************************
'
' +---------------------+
' | Optimizations Found |
' +---------------------+
'
' 1. predeclare all variable (avoid using variant)
' 2. precalculate all values, do not recalculate them (especially modulus)
' 3. use byte array instead of string (strings are array too but are slower)
' 4. use \ instead of / ( / returns rounded decimal)
' 5. use table for lookups instead of doing silly calculations
' 6. use logic operands (AND, OR) to mask out bits
'    (don't to silly DEC-BIN BIN-DEC convertion like i do!)
'
' +-------------------------------+
' | Base64 Encode / Decode method |
' +-------------------------------+
'
'   Source : RFC 1341 - MIME (Multipurpose Internet Mail Extensions)
'                             Mechanisms for Specifying and Describing
'                             the Format of Internet Message Bodies
'      URL : http://www.faqs.org/ (highly recommended)
'
' -------------------------------- snip snip snip --------------------------------
'
'            Borenstein & Freed                                 [Page 16]
'
'            RFC 1341MIME: Multipurpose Internet Mail ExtensionsJune 1992
'
'            5.2  Base64 Content-Transfer-Encoding
'
'            The  Base64   Content-Transfer-Encoding   is   designed   to
'            represent  arbitrary  sequences  of octets in a form that is
'            not humanly readable.  The encoding and decoding  algorithms
'            are simple, but the encoded data are consistently only about
'            33 percent larger than the unencoded data.  This encoding is
'            based on the one used in Privacy Enhanced Mail applications,
'            as defined in RFC 1113.   The  base64  encoding  is  adapted
'            from  RFC  1113, with one change:  base64 eliminates the "*"
'            mechanism for embedded clear text.
'
'            A 65-character subset of US-ASCII is used, enabling  6  bits
'            to  be  represented per printable character. (The extra 65th
'            character, "=", is used  to  signify  a  special  processing
'            function.)
'
'            NOTE:  This subset has the important  property  that  it  is
'            represented   identically   in  all  versions  of  ISO  646,
'            including US ASCII, and all characters  in  the  subset  are
'            also  represented  identically  in  all  versions of EBCDIC.
'            Other popular encodings, such as the encoding  used  by  the
'            UUENCODE  utility  and the base85 encoding specified as part
'            of Level 2 PostScript, do not share  these  properties,  and
'            thus  do  not  fulfill the portability requirements a binary
'            transport encoding for mail must meet.
'
'            The encoding process represents 24-bit groups of input  bits
'            as  output  strings of 4 encoded characters. Proceeding from
'            left  to  right,  a  24-bit  input  group   is   formed   by
'            concatenating  3  8-bit input groups. These 24 bits are then
'            treated as 4 concatenated 6-bit groups,  each  of  which  is
'            translated  into a single digit in the base64 alphabet. When
'            encoding a bit stream  via  the  base64  encoding,  the  bit
'            stream  must  be  presumed  to  be  ordered  with  the most-
'            significant-bit first.  That is, the first bit in the stream
'            will be the high-order bit in the first byte, and the eighth
'            bit will be the low-order bit in the first byte, and so on.
'
'            Each 6-bit group is used as an index into  an  array  of  64
'            printable  characters. The character referenced by the index
'            is placed in the output string. These characters, identified
'            in  Table  1,  below,  are  selected so as to be universally
'            representable,  and  the  set   excludes   characters   with
'            particular  significance to SMTP (e.g., ".", "CR", "LF") and
'            to the encapsulation boundaries  defined  in  this  document
'            (e.g., "-").
'
'            Borenstein & Freed                                 [Page 17]
'
'            RFC 1341MIME: Multipurpose Internet Mail ExtensionsJune 1992
'
'                            Table 1: The Base64 Alphabet
'
'               Value Encoding  Value  Encoding   Value  Encoding   Value
'            encoding
'                   0 A            17 R            34 i            51 z
'                   1 B            18 S            35 j            52 0
'                   2 C            19 T            36 k            53 1
'                   3 D            20 U            37 l            54 2
'                   4 E            21 V            38 m            55 3
'                   5 F            22 W            39 n            56 4
'                   6 G            23 X            40 o            57 5
'                   7 H            24 Y            41 p            58 6
'                   8 I            25 Z            42 q            59 7
'                   9 J            26 a            43 r            60 8
'                  10 K            27 b            44 s            61 9
'                  11 L            28 c            45 t            62 +
'                  12 M            29 d            46 u            63 /
'                  13 N            30 e            47 v
'                  14 O            31 f            48 w         (pad) =
'                  15 P            32 g            49 x
'                  16 Q            33 h            50 y
'
'            The output stream (encoded bytes)  must  be  represented  in
'            lines  of  no more than 76 characters each.  All line breaks
'            or other characters not found in Table 1 must be ignored  by
'            decoding  software.   In  base64 data, characters other than
'            those in  Table  1,  line  breaks,  and  other  white  space
'            probably  indicate  a  transmission  error,  about  which  a
'            warning  message  or  even  a  message  rejection  might  be
'            appropriate under some circumstances.''
'
'            Special processing is performed if fewer than  24  bits  are
'            available  at  the  end  of  the data being encoded.  A full
'            encoding quantum is always completed at the end of  a  body.
'            When  fewer  than  24  input  bits are available in an input
'            group, zero bits  are  added  (on  the  right)  to  form  an
'            integral number of 6-bit groups.  Output character positions
'            which are not required to represent actual  input  data  are
'            set  to  the  character  "=".   Since all base64 input is an
'            integral number of octets,  only  the  following  cases  can
'            arise:  (1)  the  final  quantum  of  encoding  input  is an
'            integral multiple of  24  bits;  here,  the  final  unit  of
'            encoded  output will be an integral multiple of 4 characters
'            with no "=" padding, (2) the final quantum of encoding input
'            is  exactly  8  bits; here, the final unit of encoded output
'            will  be  two  characters  followed  by  two   "="   padding
'            characters,  or  (3)  the final quantum of encoding input is
'            exactly 16 bits; here, the final unit of encoded output will
'            be three characters followed by one "=" padding character.
'
'            Care must be taken to use the proper octets for line  breaks
'            if base64 encoding is applied directly to text material that
'            has not been converted to  canonical  form.  In  particular,
'            text  line  breaks  should  be converted into CRLF sequences
'
'            Borenstein & Freed                                 [Page 18]
'
'            RFC 1341MIME: Multipurpose Internet Mail ExtensionsJune 1992
'
'            prior to base64 encoding. The important  thing  to  note  is
'            that this may be done directly by the encoder rather than in
'            a prior canonicalization step in some implementations.
'
'            NOTE: There is no  need  to  worry  about  quoting  apparent
'            encapsulation  boundaries  within  base64-encoded  parts  of
'            multipart entities because no hyphen characters are used  in
'            the base64 encoding.
'
'
' -------------------------------- snip snip snip --------------------------------

Option Explicit                     ' just to make sure everything is declared

Private B64EncTable(63) As Byte     ' encode table
Private B64DecTable(255) As Byte    ' decode table

' +---------------------------------------------------+
' | Build Codec Table                                 |
' +---------------------------------------------------+
' | Parameter   :                                     |
' | None                                              |
' |                                                   |
' | Description :                                     |
' | Eg 0 is encoded into A so we store A at element 0 |

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -