谁有飞鸽传书的祥细分析啊,VC版本的
有源码,不过是日文和英文的,而且是Window SDK程序
所以想找个祥细分析,网上找到一点,太少了,不全

解决方案 »

  1.   

    协议:http://blog.chinaunix.net/u1/35100/showart_423054.html一个实现:http://blog.chinaunix.net/u1/35100/showart_689330.html
      

  2.   

    ========================
    Cipher:
    1) Password Setting, only used to lock the LOCAL message to avoid open without authentication!
    2) Blowfish encryption/decryption used to:
    Blowfish with key(16KB)  imported from PC via RSA, encrypt message if "Seal" box checked when sending message!
    IPMSG_RSA_1024 && IPMSG_BLOWFISH_128    both on
    Calling functions from MS library, pCryptImportKey & pCryptGenRandom

    (From PROT_ENG.TXT)
    (Encrypted message)After a sender creates a common key that is 
    supported both sender and receiver, a common key can encrypt a message. 
    In addition, a receiver's public key encrypts the common key.

       If [Seal] is checked, it will be sealed message.
       If [Lock] is checked, it will be locked message. The receiver must
       use *receiver's own* password to open a locked message.
       
        - Password for Lock and Seal is saved in registry with encording.
         *******************************************************************
       * If you forget the password, remove it in the following registry *
       * key.  \\HKEY_CURRENT_USER\Software\HSTools\IPMsgEng\PasswordStr *
       *******************************************************************
       
       
       Received locked msg already decrypted in the memory, user click the "Open" button, enter the receiver's own local password, check it against the former saved one:
       
        MiscDlg.cpp :
        CheckPassword(cfg->PasswordStr, buf))  --> MakePassword(inputPasswd, buf);
        cfg->PasswordStr already *almost PLAIN* password string from registry, compare it with user input password.
       
        void MakePassword(const char *inputPasswd, char *outputPasswd)
    {
    while (*inputPasswd)
    {
    *outputPasswd++ = ((~*inputPasswd++) & 0x7f);//Not so complicated encryption!!!
    }
    *outputPasswd = 0;
    }   
       
       ===========Log ====
       ipmsg.log
       Normal content of chat or file trans/recv in the log file. (Locked received msg not logged!  Locked sent msg logged!)
       
       
       ===Port ============
          For example, using [ipmsg.exe 2426] command, you can contact only
       people who are using 2426 port.