穷举字符串的一种算法

前段时间想暴力破解一个KEY,希望穷举所有字符串,于是写出了一段穷举字符串的代码,供大家参考。算法思想参考了10进制数加1的操作,代码如下:

#define CHAR_HEAD 'a'  // 0x20
#define CHAR_TAIL 'z'  // 0x7E

 

// 字符串加1
void StrAdd1(char* pStr)
{
    char szStr[1024] = {0};
    strcpy(szStr, pStr);
    int nP = strlen(szStr)-1;
    if (szStr[nP] == CHAR_TAIL)
    {
        szStr[nP] = CHAR_HEAD;
        int i = 1;
        if (nP-i < 0)
        {
            char *pTmp = new char[nP+3];
            memset(pTmp, 0, nP+3);
            pTmp[0] = CHAR_HEAD;
            strcat(pTmp, szStr);
            strcpy(szStr, pTmp);
            delete[] pTmp;
            strcpy(pStr, szStr);
            return;
        }
        while (szStr[nP-i] == CHAR_TAIL)
        {
            szStr[nP-i] = CHAR_HEAD;
            i++;
            if (nP-i < 0)
            {
                char *pTmp = new char[nP+3];
                memset(pTmp, 0, nP+3);
                pTmp[0] = CHAR_HEAD;
                strcat(pTmp, szStr);
                strcpy(szStr, pTmp);
                delete[] pTmp;
                strcpy(pStr, szStr);
                return;
            }
        }
        szStr[nP-i]++;
        strcpy(pStr, szStr);
        return;
    }
    szStr[nP]++;
    strcpy(pStr, szStr);
}

posted @ 2010-04-14 16:38  cxun  阅读(946)  评论(0编辑  收藏  举报