zoukankan      html  css  js  c++  java
  • C++ 简单字符串加解密(转载)

    #include <iostream.h>
    #include <windows.h>
    #include <tchar.h>
     
    void EncodeString(LPCTSTR lpszText, LPTSTR *lpszReturn, LPCTSTR lpszKey)
    {
        int nTextLen = 0;
        char *cPos = NULL;
        char *pDest = NULL;
        if(!lpszReturn) // 加密
        {
            nTextLen = ::_tcslen(lpszText);
            pDest = (LPTSTR)lpszText;
        }
        else    // 解密
        {
            // 查找自定的中止标记
            cPos = (LPTSTR)lpszText;
            while(true) // 从这里可以看到,除非搜索到我们自定的中止标记,否则会一直搜索下去
            {
                if(*cPos == '=')
                    if(cPos[1] == '=')
                        if(cPos[2] == '')
                            break;
                cPos++;
            }
            if(!cPos)   // 没有找到结束标记,也不是加密
                return;
            nTextLen = cPos - lpszText;
            pDest = new char[nTextLen + 3]; // ==
        }
     
        int nKeyLen = ::_tcslen(lpszKey);
        int i = 0;
        int k = 0;
        for(; i < nTextLen; i++)
        {
            pDest[i] = lpszText[i] ^ lpszKey[k];
            k++;
            if(k >= nKeyLen)
                k = 0;
        }
     
        if(!cPos)
            memcpy(pDest + nTextLen, _T("=="), 3 * sizeof(TCHAR));
        else
        {
            memset(pDest  + nTextLen, _T(''), sizeof(TCHAR));
            *lpszReturn = pDest;
        }
    }
     
    int main(int argc, char* argv[])
    {
        char strText[] = "Hello world! I'm zimmerk. I'm a boy. What's your name?";
        char *lpszDest = NULL;
        cout<<strText<<endl;
        cout<<"========================================"<<endl;
        EncodeString(strText , NULL, "Zimmerk");    // 加密
        cout<<strText<<endl;
        cout<<"========================================"<<endl;
        EncodeString(strText, &lpszDest, "Zimmerk");    // 解密
        if(*lpszDest)
        {
            cout<<lpszDest<<endl;
            delete [] lpszDest;
        }
        else
            cout<<_T("(NULL)")<<endl;
        return 0;
    }
  • 相关阅读:
    kerberos和hadoop的集成
    kerberos的原理
    Impala与Hive的异同
    为什么hdfs不适合存储小文件
    猛犸数据质量
    CIO的发展之路
    企业数据能力测评:认清现状,布局未来
    企业架构的演变
    其实,他只是个没长大的孩子【复制知乎
    看着自己之前写的便签,想笑
  • 原文地址:https://www.cnblogs.com/xuandi/p/5855669.html
Copyright © 2011-2022 走看看