Translit xor crypting c ++ to php

时间:2017-04-07 05:20:34

标签: php c++ xor widechar

我想将xor crypting c ++转换为php。我使用此功能进行加密。我想用php解密这个文件。

wchar_t* encryptDecrypt(const wchar_t* toEncrypt, int length,   wchar_t* EBKey) {
    const wchar_t* key = EBKey;
    wchar_t* output = new wchar_t[length];

    for (int i = 0; i < length; i++) {
        output[i] = toEncrypt[i] ^ key[i % wcslen(key)];
    }
    return output;
}

我用encryptDecrypt

读取了xls文件二进制文件和crypt
void encryptAndSave(char *src,AnsiString key) {
    wchar_t *content;
    wchar_t  buffer[255];
    wchar_t *result;

    long size;
    long fsize;

    FILE *f=NULL;

    f=fopen(src,"rb+");

    fseek(f, 0, SEEK_END);
    size = ftell(f);
    fseek(f,0, SEEK_SET);

    content = (wchar_t *) malloc(size * sizeof (wchar_t));
    fread(content, size, 1, f);
    fclose(f);

    content=encryptDecrypt(content,size,strToWchar_t(key));

    f=fopen(src,"wb+");
    fwrite(content, size, 1, f);
    fclose(f);
}

我使用此函数将转换键转换为wchar_t

wchar_t* strToWchar_t(AnsiString value) {
    int iSize = value.WideCharBufSize();
    wchar_t *tmp = new wchar_t[iSize];

    value.WideChar(tmp,iSize);
    return tmp;
}

这段代码在php中用于解密

function encryptDecrypt($toEncrypt,$key) {
    $output=array();
    for ( $i = 0; $i < strlen($toEncrypt); $i++ ) {
        $output[$i]= $toEncrypt[$i] ^ $key{$i % strlen($key)};
    }
    return $output;
} 

但它不正确地解密。当我用c ++加密和解密这个词时,结果必须是“qwerty”到“غCDT @ GH”,但在php中它不能用作c ++。当我在php中解密“غCDT @ GH”时我得到“яМp1v3e2s1u3y2”,但我必须得到“qwerty”。请帮助解决此问题。

0 个答案:

没有答案