非常谢谢!
我要进行的操作过程是这样的:CString sTest="ABC";//明文
CString sKEY="ABC";// 密匙我的目的是将这两个串异或,由此将明文加密.
解密是将结果与密匙再进行一次异或.我知道CString是不能直接进行按位异或的,得先转化为BYTE类型.请问这个过程如何实现?特别感谢!

解决方案 »

  1.   

    CString 重载了 operator const CHAR* 可以直接转化为 const CHAR* 
      

  2.   


    CString  重载了 operator [] ,sTest[i]就可以取得第i个字符。
      

  3.   

    int len = sTest.GetLength() ; 
    char *buffer = new char[len+1] ; 
    buffer[len] = 0 ; ASSERT(len>=sKey.GetLength() ; // 密匙 的长度不要小于明文的长度for(int i=0 ; i<len ; i++)
    {
       buffer[i] = sTest[i] ^ sKey[i] ; // 异或
    }
    // 得到的 buffer 就是密文。
    delete []buffer ;
      

  4.   

    ASSERT(len>=sKey.GetLength() ; // 密匙 的长度不要小于明文的长度--------------------------------------------------------------------这个写错了,应该是ASSERT( len <= sKey.GetLength() ) ; 抱歉。
      

  5.   

    那异或操作呢?
    是这样吗?
    int index;
    index=0;
    for(int i=0;i<sTest.GetLength;i++)
    {
    sTest[i]=sTest[i]^sKEY[(index++)];
    if(index=sKEY.GetLength)index=0;
    }
    自己很笨,这个问题弄了好几天!
    希望能得到帮助.
      

  6.   

    void
    EncryptPsw(const CString & sPsw, const CString & sKey, BYTE * pbEncryptedPsw, const int & nBuffLenEncryptedPsw)
    {
    ASSERT(pbEncryptedPsw);
    ASSERT(sKey.GetLength() >= sPsw.GetLength());
    ASSERT(sPsw.GetLength() <= nBuffLenEncryptedPsw);for (int i = 0; i < sPsw.GetLength(); i++)
    {
    pbEncryptedPsw[i] = sPsw[i] ^ sKey[i];
    }
    }
      

  7.   

    谢谢啦!
    那buffer里的内容如何再变成字符串CString呢?
      

  8.   

    1. sTest[i] = sTest[i] ^ sKey[index++] ;
     // 这个地方过不去,sTest[i] 好像只能读不能写。
     
    2. sTest.GetLength  这个地方漏了括号,应该是 sTest.GetLength()3. if(index=sKey.GetLength) 
    判断等于要用 == ,不能用 =
      

  9.   

    稍微改了一点:int len = sTest.GetLength() ; 
    char *buffer = new char[len+1] ; 
    buffer[len] = 0 ; int index = 0 ; 
    for(int i=0 ; i<len ; i++)
    {
       buffer[i] = sTest[i] ^ sKey[index++] ; // 异或
       if( index == sKey.GetLength() ) index = 0 ; 
    }
    // 得到的 buffer 就是密文。CString answer = buffer ; // 直接对 CString 赋值就行了。
    delete []buffer ;
      

  10.   

    下面的程序进行调试后,结果是"qrs",结果不应该是这个吧!?
     
          CString sTest="ABC";//明文
          CString sKey="0";// 密匙
          int len = sTest.GetLength() ; 
          char *buffer = new char[len+1] ; 
          buffer[len] = 0 ;       int index = 0 ; 
          for(int i=0 ; i<len ; i++)
      {
            buffer[i] = sTest[i] ^ sKey[index++] ; // 异或
            if( index == sKey.GetLength() ) index = 0 ; 
      }
          // 得到的 buffer 就是密文。      CString answer = buffer ; // 直接对 CString 赋值就行了。
          delete []buffer ;    
    AfxMessageBox(answer);
      

  11.   

    'A' ^ '0' = 'q''A' = 0x30 ; // 00110000
    '0' = 0x41 ; // 01000001
    'q' = 0x71 ; // 01110001
    有问题么?
      

  12.   

    'A'的ASCII码是:65, 转化为16进制是41H啊?
    '0'是00H