应该不行吧,如果用php调用编绎成功的C语言写的东东好像是可以的。

解决方案 »

  1.   

    下载php源代码找到这两个函数,放到你的c程序里
      

  2.   

    “下载php源代码找到这两个函数,放到你的c程序里”可以参考
      

  3.   

    base64编码和解码 
     wyzhf 发表于 2/27/2002 8:09:18 PM Visual Basic Base64算法是把3个8位字符(24)转换成4个6位字符(32),因此编码后的长度会扩大1/3,
    进行编码转换时需要用到一张Base64的编码表:
                                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
    在VB中可以简单的将其保存为一个常量:
    Private Const Base64Table =
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="编码过程是这样的,第一个字符通过右移2位获得第一个目标字符的Base64表位置,根据
    这个数值取到表上相应的字符,就是第一个目标字符
    ,然后将第一个字符左移6位加上第二个字符右移4位,即获得第二个目标字符,再将第二
    个字符左移4位加上第三个字符右移6位,获得第三个
    目标字符,最后取第三个字符的右6位即获得第四个目标字符.例如我们取一个简单的字符串"TEST..."
    将其用SourceByte = StrConv(SourceText, vbFromUnicode)转换后获得二进制数组:
    T         E         S         T            ...
    84        69        83        84           ...
    01010100  01000101  01010011  01010100     ...
    01010100/01000101/01010011/01010100
    01010100010001010101001101010100
    转换后:
    01010100010001010101001101010100
    010101/000100/010101/010011/010101/00
    010101    000100    010101    010011    010101    00....
    21        4         21        19        21        ...
    V         E         V         T         V         ...
    最后得到的就是"VEVTV..."对于第一个目标字符我们可以这样做:
    (SourceByte(1) and 252)/4
    第二个:
    (SourceByte(1) and 3)*64 + (SourceByte(2) and 240)/16
    第三个:
    (SourceByte(2) and 15)*16 + (SourceByte(3) and 48)/64
    第四个:
    (SourceByte(3) and 63)可惜只有这点点
      

  4.   

    base64编码、解码函数 
     great 发表于 2/1/2002 9:31:08 AM Joy ASP这是我看完几个base64编码、解码函数后自己改写的。
    因为,在中文操作系统的VBscript中,使用的是unicode字符集,所以
    很多base64编码、解码函数在理论上是正确的,但实际不能运行!我加写了几个Unicode与Ansi编码转换的函数,现贴出来,请大家执教!
    文件名称base64test.asp<%sBASE_64_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"  
    sBASE_64_CHARACTERS = strUnicode2Ansi(sBASE_64_CHARACTERS)Function strUnicodeLen(asContents)
      '计算unicode字符串的Ansi编码的长度
      asContents1="a"&asContents
      len1=len(asContents1)
      k=0
      for i=1 to len1
          asc1=asc(mid(asContents1,i,1))
          if asc1<0 then asc1=65536+asc1
          if asc1>255 then
             k=k+2
          else
             k=k+1
          end if
      next
      strUnicodeLen=k-1
    End FunctionFunction strUnicode2Ansi(asContents)
      '将Unicode编码的字符串,转换成Ansi编码的字符串
      strUnicode2Ansi=""
      len1=len(asContents)
      for i=1 to len1
          varchar=mid(asContents,i,1)
          varasc=asc(varchar)
          if varasc<0 then varasc=varasc+65536
          if varasc>255 then
             varHex=Hex(varasc)
             varlow=left(varHex,2)
             varhigh=right(varHex,2)
             strUnicode2Ansi=strUnicode2Ansi & chrb("&H" & varlow ) & chrb("&H" & varhigh )
          else
             strUnicode2Ansi=strUnicode2Ansi & chrb(varasc)
          end if
       next
    End functionFunction strAnsi2Unicode(asContents)
      '将Ansi编码的字符串,转换成Unicode编码的字符串
      strAnsi2Unicode = ""
      len1=lenb(asContents)
      if len1=0 then exit function
      for i=1 to len1
          varchar=midb(asContents,i,1)
          varasc=ascb(varchar)
          if varasc > 127  then 
             strAnsi2Unicode = strAnsi2Unicode & chr(ascw(midb(asContents,i+1,1) & varchar))
             i=i+1
          else
             strAnsi2Unicode = strAnsi2Unicode & chr(varasc)
          end if
      next
    End functionFunction Base64encode(asContents)  
    '将Ansi编码的字符串进行Base64编码
    'asContents应当是ANSI编码的字符串(二进制的字符串也可以)
    Dim lnPosition  
    Dim lsResult  
    Dim Char1  
    Dim Char2  
    Dim Char3  
    Dim Char4  
    Dim Byte1  
    Dim Byte2  
    Dim Byte3  
    Dim SaveBits1  
    Dim SaveBits2  
    Dim lsGroupBinary  
    Dim lsGroup64  
    Dim m4,len1,len2len1=Lenb(asContents)
    if len1<1 then 
       Base64encode=""
       exit Function
    end ifm3=Len1 Mod 3 
    If M3 > 0 Then asContents = asContents & String(3-M3, chrb(0))  
    '补足位数是为了便于计算IF m3 > 0 THEN 
       len1=len1+(3-m3)
       len2=len1-3
    else
       len2=len1
    end iflsResult = ""  For lnPosition = 1 To len2 Step 3  
        lsGroup64 = ""  
        lsGroupBinary = Midb(asContents, lnPosition, 3)      Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 And 3  
        Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 And 15  
        Byte3 = Ascb(Midb(lsGroupBinary, 3, 1))      Char1 = Midb(sBASE_64_CHARACTERS, ((Byte1 And 252) \ 4) + 1, 1)  
        Char2 = Midb(sBASE_64_CHARACTERS, (((Byte2 And 240) \ 16) Or (SaveBits1 * 16) And &HFF) + 1, 1)  
        Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 And 192) \ 64) Or (SaveBits2 * 4) And &HFF) + 1, 1)  
        Char4 = Midb(sBASE_64_CHARACTERS, (Byte3 And 63) + 1, 1)  
        lsGroup64 = Char1 & Char2 & Char3 & Char4  
        
        lsResult = lsResult & lsGroup64  
    Next  '处理最后剩余的几个字符
    if M3 > 0  then
        lsGroup64 = ""  
        lsGroupBinary = Midb(asContents, len2+1, 3)      Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 And 3  
        Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 And 15  
        Byte3 = Ascb(Midb(lsGroupBinary, 3, 1))      Char1 = Midb(sBASE_64_CHARACTERS, ((Byte1 And 252) \ 4) + 1, 1)  
        Char2 = Midb(sBASE_64_CHARACTERS, (((Byte2 And 240) \ 16) Or (SaveBits1 * 16) And &HFF) + 1, 1)  
        Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 And 192) \ 64) Or (SaveBits2 * 4) And &HFF) + 1, 1)  
      

  5.   


        if M3=1 then
           lsGroup64 = Char1 & Char2 & ChrB(61) & ChrB(61)   '用=号补足位数
        else
           lsGroup64 = Char1 & Char2 & Char3 & ChrB(61)      '用=号补足位数
        end if
        
        lsResult = lsResult & lsGroup64  
    end ifBase64encode = lsResult  End Function  
    Function Base64decode(asContents)  
    '将Base64编码字符串转换成Ansi编码的字符串
    'asContents应当也是ANSI编码的字符串(二进制的字符串也可以)
    Dim lsResult  
    Dim lnPosition  
    Dim lsGroup64, lsGroupBinary  
    Dim Char1, Char2, Char3, Char4  
    Dim Byte1, Byte2, Byte3  
    Dim M4,len1,len2len1= Lenb(asContents) 
    M4 = len1 Mod 4if len1 < 1 or M4 > 0 then
       '字符串长度应当是4的倍数
       Base64decode = ""  
       exit Function  
    end if
           
    '判断最后一位是不是 = 号
    '判断倒数第二位是不是 = 号
    '这里m4表示最后剩余的需要单独处理的字符个数
    if midb(asContents, len1, 1) = chrb(61)   then   m4=3 
    if midb(asContents, len1-1, 1) = chrb(61) then   m4=2if m4 = 0 then
       len2=len1
    else
       len2=len1-4
    end ifFor lnPosition = 1 To Len2 Step 4  
        lsGroupBinary = ""  
        lsGroup64 = Midb(asContents, lnPosition, 4)  
        Char1 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 1, 1)) - 1  
        Char2 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 2, 1)) - 1  
        Char3 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 3, 1)) - 1  
        Char4 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 4, 1)) - 1  
        Byte1 = Chrb(((Char2 And 48) \ 16) Or (Char1 * 4) And &HFF)  
        Byte2 = lsGroupBinary & Chrb(((Char3 And 60) \ 4) Or (Char2 * 16) And &HFF)  
        Byte3 = Chrb((((Char3 And 3) * 64) And &HFF) Or (Char4 And 63))  
        lsGroupBinary = Byte1 & Byte2 & Byte3  
        
        lsResult = lsResult & lsGroupBinary  
    Next '处理最后剩余的几个字符
    if M4 > 0 then 
        lsGroupBinary = ""  
        lsGroup64 = Midb(asContents, len2+1, m4) & chrB(65)   'chr(65)=A,转换成值为0
        if M4=2 then                                          '补足4位,是为了便于计算 
            lsGroup64 = lsGroup64 & chrB(65)                  
        end if
        Char1 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 1, 1)) - 1  
        Char2 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 2, 1)) - 1  
        Char3 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 3, 1)) - 1  
        Char4 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 4, 1)) - 1  
        Byte1 = Chrb(((Char2 And 48) \ 16) Or (Char1 * 4) And &HFF)  
        Byte2 = lsGroupBinary & Chrb(((Char3 And 60) \ 4) Or (Char2 * 16) And &HFF)  
        Byte3 = Chrb((((Char3 And 3) * 64) And &HFF) Or (Char4 And 63))  
      
        if M4=2 then
           lsGroupBinary = Byte1
        elseif M4=3 then
           lsGroupBinary = Byte1 & Byte2
        end if
        
        lsResult = lsResult & lsGroupBinary  
    end ifBase64decode = lsResult  End Function  
    '---------------------------------------------------------------------------------
    response.write strUnicode2Ansi("abc我们d我们") & "<hr>"
    response.write strAnsi2Unicode(Base64encode(strUnicode2Ansi("abc我们d我们"))) & "<hr>"
    response.write strAnsi2Unicode(Base64encode(strUnicode2Ansi("abc我们d我们a"))) & "<hr>"
    response.write strAnsi2Unicode(Base64encode(strUnicode2Ansi("abc我们d我们ab"))) & "<hr>"
    response.write strAnsi2Unicode(Base64encode(strUnicode2Ansi("abc我们d我们abc"))) & "<hr>"response.write strAnsi2Unicode(Base64decode(Base64encode(strUnicode2Ansi("abc我们d我们")))) & "<hr>"
    response.write strAnsi2Unicode(Base64decode(Base64encode(strUnicode2Ansi("abc我们d我们a")))) & "<hr>"
    response.write strAnsi2Unicode(Base64decode(Base64encode(strUnicode2Ansi("abc我们d我们ab")))) & "<hr>"
    response.write strAnsi2Unicode(Base64decode(Base64encode(strUnicode2Ansi("abc我们d我们abc")))) & "<hr>"
    sdecode="Sm1haWy1xNb30qqyzsr9wdCx7Q0K1/fV36O6dG9ueTEzMiAgMjAwMC0wNS0yNNXixqq45bz+sbvU"
    sdecode=sdecode & "xLbBPT0xNTK0zg0KIA0KDQqhoaGh1/fV3yBb0ru/y10gDQqhoaGhIA0KoaGhoQ0KoaGhocu1w/ej"
    sdecode=sdecode & "urj8tuC1xNDFz6LH67LOv7xKbWFpbMu1w/ejrM7Sz+vV4tLRvq3X47m708O1xMHLoaMNCqGhoaEN"
    sdecode=sdecode & "CqGhoaHT9rW9zsrM4sfrsrvSqs7KztKjrNLyzqq3/s7xxvfUrdLyo6zO0r32vfbKudPDQ0RPTlRT"
    sdecode=sdecode & "t6LQxaOsU29ycnkuLi4NCqGhoaENCqGhoaGjqDGjqUJvZHmjqNDFvP7V/c7Eo6kgOiDX1rf7tK4N"
    sdecode=sdecode & "CqGhoaENCqGhoaHI56O6Sk1haWwuQm9keSA9ICLV4sDvv8nS1MrH08O7p8zu0LS1xLHttaXE2sjd"
    sdecode=sdecode & "o6y/ydLUyKHX1EZyb22hoyINCqGhoaENCqGhoaENCqGhoaGjqDKjqUNoYXJzZXSjqNfWt/u8r6Os"
    sdecode=sdecode & "yLHKoc6qIlVTLUFTQ0lJIqOpIDog19a3+7SuDQqhoaGhDQqhoaGhyOejukpNYWlsLkNoYXJzZXQg"
    sdecode=sdecode & "PSAiVVMtQVNDSUkiIA0KoaGhoQ0KoaGhoaOoM6OpQ29udGVudFRyYW5zZmVyRW5jb2RpbmcgOiDX"
    sdecode=sdecode & "1rf7tK4NCqGhoaENCqGhoaHWuLaoxNrI3bSry83KsbXEseDC67e9yr2jrMixyqHKxyJRdW90ZWQt"
    sdecode=sdecode & "UHJpbnRhYmxlIiANCqGhoaHI56O6Sk1haWwuQ29udGVudFRyYW5zZmVyRW5jb2RpbmcgPSAiYmFz"
    sdecode=sdecode & "ZTY0Ig0KoaGhoQ0KoaGhoaOoNKOpQ29udGVudFR5cGWjqNDFvP61xGNvbnRlbnR5cGUuIMixyqHK"
    sdecode=sdecode & "xyJ0ZXh0L3BsYWluIqOpIDog19a3+7SuDQqhoaGhDQqhoaGhyOe5+8Tj0tRIVE1MuPHKvbeiy83T"
    sdecode=sdecode & "yrz+LCC4xM6qInRleHQvaHRtbCK8tL/JoaMgDQqhoaGhyOejukpNYWlsLkNvbnRlbnRUeXBlID0g"
    sdecode=sdecode & "InRleHQvaHRtbCINCqGhoaENCqGhoaENCqGhoaGjqDWjqUVuY29kaW5nIDog19a3+7SuDQqhoaGh"
    sdecode=sdecode & "DQqhoaGhyejWw7i9vP6x4MLrt73KvaOoyLHKocrHImJhc2U2NKOpoaMgv8nS1NGh1PHKudPDtcTK"
    sdecode=sdecode & "xyJiYXNlNjQiLCAidXVlbmNvZGUiIG9yICJxdW90ZWQtcHJpbnRhYmxlIiANCqGhoaHI56O6Sk1h"
    sdecode=sdecode & "aWwuRW5jb2RpbmcgPSAiYmFzZTY0Ig0KoaGhoQ0KoaGhoQ0KoaGhoaOoNqOpTG9no6hKbWFpbLS0"
    sdecode=sdecode & "vai1xMjV1r6jrMewzOFsb2dpbmfK9NDUyejWw86qdHJ1ZaOsvPvPwsPmo6kgOiDX1rf7tK4NCqGh"
    sdecode=sdecode & "oaENCqGhoaHI56O6yrnTw1Jlc3BvbnNlLldyaXRlKCBKTWFpbC5Mb2cgKdPvvuTB0LP2yNXWvtDF"
    sdecode=sdecode & "z6Khow0KoaGhoQ0KoaGhoQ0KoaGhoaOoN6OpTG9nZ2luZ6Ooyse38cq508PI1da+o6kgOiCyvLb7"
    sdecode=sdecode & "0M0NCqGhoaENCqGhoaHI56O6Sk1haWwuTG9nZ2luZyA9IHRydWUNCqGhoaENCqGhoaENCqGhoaGj"
    sdecode=sdecode & "qDijqVJlY2lwaWVudHMgOiDX1rf7tK4NCqGhoaENCqGhoaHWu7bByvTQ1KOst7W72Mv509DK1bz+"
    sdecode=sdecode & "yMsNCqGhoaHI56O6UmVzcG9uc2UuV3JpdGUoICIiICsgSk1haWwuUmVjaXBpZW50cyArICIiICk7"
    sdecode=sdecode & "DQqhoaGhDQqhoaGhDQqhoaGho6g5o6lSZXBseVRvo6jWuLaosfC1xLvY0MW12Na3o6kgOiDX1rf7"
    sdecode=sdecode & "tK4NCqGhoaENCqGhoaHI56O6Sk1haWwuUmVwbHlUbyA9ICJhbnlvdGhlckBtYWlsaG9zdC5jb20i"
    sdecode=sdecode & "DQqhoaGhDQqhoaGhDQqhoaGho6gxMKOpU2VuZGVyo6ggt6K8/sjLtcTTyrz+tdjWt6OpIDog19a3"
    sdecode=sdecode & "+7SuDQqhoaGhDQqhoaGhyOejukpNYWlsLlNlbmRlciA9ICJzZW5kZXJAbWFpbGhvc3QuY29tIg0K"
    sdecode=sdecode & "oaGhoQ0KoaGhoQ0KoaGhoaOoMTGjqVNlbmRlck5hbWWjqLeivP7Iy7XE0NXD+6OpIDog19a3+7Su"
    sdecode=sdecode & "DQqhoaGhDQqhoaGhyOejukpNYWlsLlNlbmRlck5hbWUgPSAi0ru/yyINCqGhoaENCqGhoaENCqGh"
    sdecode=sdecode & "oaGjqDEyo6lTZXJ2ZXJBZGRyZXNzo6jTyrz+t/7O8cb3tcS12Na3o6kgOiDX1rf7tK4NCqGhoaEN"response.write replace(strAnsi2Unicode(Base64decode(strUnicode2Ansi(sdecode))),chr(13)&chr(10),"<br>") & "<hr>"response.end
    %>