加密算法如下:(据说和base64类似)解码代码只要能把"Vba]Wc]eW_<lIn{GzXGZlxSRghc["解成"jianxin007/所罗门之蛇就可以了!"int WINAPI fnEncode6BitBufW(unsigned char *pszSrc, TCHAR *pszDest, int nSrcLen, int nDestLen)
{
int nDestPos = 0;
int nRestCount = 0;
unsigned char chMade = 0, chRest = 0; for (int i = 0; i < nSrcLen; i++)
{
if (nDestPos >= nDestLen) break;

chMade = ((chRest | (pszSrc[i] >> (2 + nRestCount))) & 0x3f);
chRest = (((pszSrc[i] << (8 - (2 + nRestCount))) >> 2) & 0x3f); nRestCount += 2; if (nRestCount < 6)
pszDest[nDestPos++] = chMade + 0x3c;
else
{
if (nDestPos < nDestLen - 1)
{
pszDest[nDestPos++] = chMade + 0x3c;
pszDest[nDestPos++] = chRest + 0x3c;
}
else
pszDest[nDestPos++] = chMade + 0x3c; nRestCount = 0;
chRest = 0;
}
} if (nRestCount > 0)
pszDest[nDestPos++] = chRest + 0x3c; pszDest[nDestPos] = L'\0'; return nDestPos;
}

解决方案 »

  1.   

    I looked through this encryption function this afternoon,and I analysed its work routine. Fortunately,I got the key to decryption.The following is some data that I think useful.Now enjoy it:)
    Testing Data:
    Source String:jianxin007/所罗门之蛇.
    Dest String:Vba]Wc]eW_<lIn{GzXGZlxSRghc[
    Encryption Routine:
    Loop chMade chRest nRestCount Src Dest
    1 00011010 00100000 0 Src[0]=01101010 Dest[0] =chMade+0x3c
    2 00100110 00100100 2 Src[1]=01101001 Dest[1]=chMade+0x3c
    3 00100101 00100001 4 Src[2]=01100001 Dest[2]= chMade+0x3cDest[3]= chRest+0x3c
    Since nRestCount=6,now we set ChRest and nRestCount to 0,and restart encryption process…
    … …
    Accroding to the above table,we can see clearly that:in the first time of loop,chRest:00100000,the 5th and 6th bit(bold part) are equal to the corresponding bits in Src[0],and these two bits are saved to the value—chMade in the second time of loop.Obviously,we can compute chMade with the dest[1],which we have to use to compute src[0].Its expression is: ((Dest[1]-0x3c)<<2)>>6,and this value is the last two bit in Src[0],now we have got Src[0],and in the same way,we can compute Src[1] with chMade,of course,Src[2] needs to be computed with chRest.Now I give the two functions.Good luck!
    int WINAPI fnEncode6BitBufW(unsigned char *pszSrc, TCHAR *pszDest, int nSrcLen, int nDestLen)
    {
    int nDestPos = 0;
    int nRestCount = 0;
    unsigned char chMade = 0, chRest = 0;
    for (int i = 0; i < nSrcLen; i++){
    if (nDestPos >= nDestLen) break;
    chMade = ((chRest | (pszSrc[i] >> (2 + nRestCount))) & 0x3f);
    chRest = (((pszSrc[i] << (8 - (2 + nRestCount))) >> 2) & 0x3f);
    nRestCount += 2;
    if (nRestCount < 6)
      pszDest[nDestPos++] = chMade + 0x3c;
    else{
    if (nDestPos < nDestLen - 1){
    pszDest[nDestPos++] = chMade + 0x3c;
    pszDest[nDestPos++] = chRest + 0x3c;
    }else
    pszDest[nDestPos++] = chMade + 0x3c;//In fact,I think this sentence 
    //is non-functional.
    nRestCount = 0;
    chRest = 0;
    }
    }
    if (nRestCount > 0)
    pszDest[nDestPos++] = chRest + 0x3c;
    pszDest[nDestPos] = L'\0';
    return nDestPos;

    int fnDecode6BitBufW(TCHAR *pszSrc, TCHAR *pszDest, int nSrcLen, int nDestLen)
    {
      int nDestPos = 0;
    int nRestCount = 2;
    unsigned char chMade = 0, chRest = 0;
    for(int i=0;i<nSrcLen-1;i++){
    if(nDestPos>=nDestLen-1)
    return -1;/*INSUFFCIENT_BUFFER*/
    if(nRestCount<6){
        unsigned char m,m1;
    m=pszSrc[i]-0x3c;
    m=m<<nRestCount;
    m1=pszSrc[i+1]-0x3c;
    m1=m1<<2;
    m1=m1>>(8-nRestCount);
    pszDest[nDestPos++]=m|m1;
    }else{
            int m,m1;
      m=pszSrc[i]-0x3c;
      m=m<<nRestCount;
      m1=pszSrc[i+1]-0x3c;
      m1=m1<<2;
      m1=m1>>(8-nRestCount);
            pszDest[nDestPos++]=m|m1;
      i++;
    }
    if(nRestCount>=6)
    nRestCount=2;
    else
        nRestCount+=2;
    }
    pszDest[nDestPos]='\0';
    return nDestPos;
    }