麻烦哪位师父给帮忙指点哈。能实现必结贴。#define XOR_EX_KEY  "\x33\x96\x8e\xfa\x24\xa9\xb1\x6a\x51\x03\x27\xc5\x52\x92\xe3\xf8\x19\x07\x3a\x92\x68"
void xor_buf_ex(
    unsigned char *pInBuffer,
    unsigned char *pOutBuffer,
    unsigned long cbBuffer,
    unsigned char *pKey,
    unsigned long lKeyLen,
    unsigned long offset
    )
{
    if (lKeyLen <= 0) return;
    for (unsigned long i=0; i<cbBuffer; i++) {
        unsigned u = ((unsigned long)offset+i)%lKeyLen;
        *pOutBuffer = *pInBuffer ^ pKey[u];
        *pOutBuffer = *pOutBuffer ^ i;
        pInBuffer++;
        pOutBuffer++;
    }
}用xor_buf_ex()进行解密就可以了:xor_buf_ex((unsigned char *)buf, 
(unsigned char *)buf, nConfigLen, (unsigned char *)XOR_EX_KEY, strlen(XOR_EX_KEY), 0); 

解决方案 »

  1.   

    恩,测试成功,就差Java的代码风格没改了。
    :Java
    public class Abc { static final String XOR_EX_KEY = "\u0033\u0096\u008e\u00fa\u0024\u00a9\u00b1\u006a\u0051\u0003\u0027\u00c5"; //\x52\x92\xe3\xf8\x19\x07\x3a\x92\x68"
    public static void xor_buf_ex(
    byte[] pInBuffer,
    byte[] pOutBuffer,
    String pKey,
    long offset
    )
    {
    if (pInBuffer.length <= 0)
    return;
    int lKeyLen = pKey.length();
    byte[] keyBytes = pKey.getBytes();
    for (int i = 0; i<pInBuffer.length; i++)
    {
    byte u = (byte) ((offset + i) % lKeyLen);
    pOutBuffer[i] = (byte) (pInBuffer[i] ^ keyBytes[(int)u]);
    pOutBuffer[i] = (byte) (pOutBuffer[i] ^ i); }
    }

    public static void main(String[] args) {
    byte[] inbuffer = { 12, 34, 45, 56, 56, 76, 87, 23};
    byte[] outbuffer = new byte[inbuffer.length];
    byte[] outbuffer2 = new byte[inbuffer.length];
    xor_buf_ex(inbuffer, outbuffer, XOR_EX_KEY, 0);
    xor_buf_ex(outbuffer, outbuffer2, XOR_EX_KEY, 0);
    int a = 0;

    }
    }
    :C++#define XOR_EX_KEY "\x33\x96\x8e\xfa\x24\xa9\xb1\x6a\x51\x03\x27\xc5"//\x52\x92\xe3\xf8\x19\x07\x3a\x92\x68"
    void xor_buf_ex(
    unsigned char *pInBuffer,
    unsigned char *pOutBuffer,
    unsigned long cbBuffer,
    unsigned char *pKey,
    unsigned long lKeyLen,
    unsigned long offset
    )
    {
    if (lKeyLen <= 0) return;
    for (unsigned long i=0; i<cbBuffer; i++)
    {
    unsigned u = ((unsigned long)offset+i) % lKeyLen;
    *pOutBuffer = *pInBuffer ^ pKey[u];
    *pOutBuffer = *pOutBuffer ^ i;
    pInBuffer++;
    pOutBuffer++;
    }
    }int _tmain(int argc, _TCHAR* argv[])
    {
    unsigned char* inbuffer = (unsigned char*)"abcdefg";
    unsigned char outbufer[1024] = {};
    xor_buf_ex(inbuffer, outbufer, 7, (unsigned char*)XOR_EX_KEY, 12, 0); unsigned char outbufer2[1024] = {};
    xor_buf_ex(outbufer, outbufer2, 7, (unsigned char*)XOR_EX_KEY, 12, 0);
    return 0;
    }都是可 抑或解密 回来的。
      

  2.   

    healer_kx师父我以结贴您给指导的java程序我看的不是太懂。是不是您说的恩,测试成功,就差Java的代码风格没改了。。能不能再给改动一下。。
      

  3.   

    我以结贴您能把java程序再改动一下么我是新手看不太懂。麻烦师父了。。