首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

Base64 編碼演算法與組合語言實作

     編輯:VC 教學

演算法原理

Base64 將原始資料以 6 bits 為一組分組,高 2 bits 補 0 成一位元組,再查碼表對應可列印字元。原始資料長度非 3 倍數時以 0 補齊參與運算,最後將全 0 位元組替換為 = 補齊輸出長度為 4 的倍數。

Base64 碼表

Value  Char  Value  Char  Value  Char  Value  Char
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

組合語言實作(MASM 風格)

編碼 base64_enc

  • 輸入:esi=來源緩衝區, ecx=長度, edi=目標緩衝區
  • 核心邏輯:每 3 位元組(24 bits)轉 4 個 6-bit 索引,查表輸出 4 字元
  • 不足 3 位元組時補 0 處理,結尾寫入 =
  • 純代碼 55 行,112 位元組

解碼 base64_dec

  • 輸入:esi=Base64 字串, ecx=長度, edi=輸出緩衝區
  • 每 4 字元合併為 3 位元組,處理 = 填充
  • 純代碼 49 行,101 位元組

測試主程式

StArT:
    mov esi, en_1          ; 原始字串 "Sun Bird!!!"
    mov edi, buf
    mov ecx, en1.size
    call base64_enc
    invoke MessageBox, 0, buf, zTit, 0

    mov edi, buf
    call my_strlen
    mov esi, buf
    mov edi, buf3
    call base64_dec
    invoke MessageBox, 0, buf3, zTit, 0
    ; 顯示長度統計...
    invoke ExitProcess, 0

特色

  • 無查表陣列,完全以位元運算與條件判斷實現編碼/解碼邏輯
  • 極度精簡,適合體積受限場合(如 Shellcode、Bootloader)
  • 作者堅持「讓聰明的程式來幹這玩意」而非查表法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved