Exemplo n.º 1
0
    /**
     * 2.0-style cloaking function
     * @param item The item to cloak (part of an IP or hostname)
     * @param id A unique ID for this type of item (to make it unique if the item matches)
     * @param len The length of the output. Maximum for MD5 is 16 characters.
     */
    std::string SegmentCloak(const std::string& item, char id, int len)
    {
        std::string input;
        input.reserve(key.length() + 3 + item.length());
        input.append(1, id);
        input.append(key);
        input.append(1, '\0'); // null does not terminate a C++ string
        input.append(item);

        std::string rv = Hash->Generate(input).substr(0,len);
        for(int i=0; i < len; i++)
        {
            // this discards 3 bits per byte. We have an
            // overabundance of bits in the hash output, doesn't
            // matter which ones we are discarding.
            rv[i] = base32[rv[i] & 0x1F];
        }
        return rv;
    }