⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qmdcodec.cpp

📁 linux下的eva源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    init();}QMD5::QMD5(const char *in, int len){    init();    update(in, len);}QMD5::QMD5(const QByteArray& in){    init();    update( in );}QMD5::QMD5(const QCString& in){    init();    update( in );}void QMD5::update(const QByteArray& in){    update(in.data(), int(in.size()));}void QMD5::update(const QCString& in){    update(in.data(), int(in.length()));}void QMD5::update(const unsigned char* in, int len){    if (len < 0)        len = qstrlen(reinterpret_cast<const char*>(in));    if (!len)        return;    if (m_finalized) {        qWarning("QMD5::update called after state was finalized!");        return;    }    Q_UINT32 in_index;    Q_UINT32 buffer_index;    Q_UINT32 buffer_space;    Q_UINT32 in_length = static_cast<Q_UINT32>( len );    buffer_index = static_cast<Q_UINT32>((m_count[0] >> 3) & 0x3F);    if (  (m_count[0] += (in_length << 3))<(in_length << 3) )        m_count[1]++;    m_count[1] += (in_length >> 29);    buffer_space = 64 - buffer_index;    if (in_length >= buffer_space)    {        memcpy (m_buffer + buffer_index, in, buffer_space);        transform (m_buffer);        for (in_index = buffer_space; in_index + 63 < in_length;             in_index += 64)            transform (reinterpret_cast<const unsigned char*>(in+in_index));        buffer_index = 0;    }    else        in_index=0;    memcpy(m_buffer+buffer_index, in+in_index, in_length-in_index);}bool QMD5::update(QIODevice& file){    char buffer[1024];    int len;    while ((len=file.readBlock(reinterpret_cast<char*>(buffer), sizeof(buffer))) > 0)        update(buffer, len);    return file.atEnd();}void QMD5::finalize (){    if (m_finalized) return;    Q_UINT8 bits[8];    Q_UINT32 index, padLen;    static unsigned char PADDING[64]=    {        0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0    };    encode (bits, m_count, 8);    //memcpy( bits, m_count, 8 );    // Pad out to 56 mod 64.    index = static_cast<Q_UINT32>((m_count[0] >> 3) & 0x3f);    padLen = (index < 56) ? (56 - index) : (120 - index);    update (reinterpret_cast<const char*>(PADDING), padLen);    // Append length (before padding)    update (reinterpret_cast<const char*>(bits), 8);    // Store state in digest    encode (m_digest, m_state, 16);    //memcpy( m_digest, m_state, 16 );    // Fill sensitive information with zero's    memset ( (void *)m_buffer, 0, sizeof(*m_buffer));    m_finalized = true;}bool QMD5::verify( const QMD5::Digest& digest){    finalize();    return (0 == memcmp(rawDigest(), digest, sizeof(QMD5::Digest)));}bool QMD5::verify( const QCString& hexdigest){    finalize();    return (0 == strcmp(hexDigest().data(), hexdigest));}const QMD5::Digest& QMD5::rawDigest(){    finalize();    return m_digest;}void QMD5::rawDigest( QMD5::Digest& bin ){    finalize();    memcpy( bin, m_digest, 16 );}QCString QMD5::hexDigest(){    QCString s(33);    finalize();    sprintf(s.data(), "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",            m_digest[0], m_digest[1], m_digest[2], m_digest[3], m_digest[4], m_digest[5],            m_digest[6], m_digest[7], m_digest[8], m_digest[9], m_digest[10], m_digest[11],            m_digest[12], m_digest[13], m_digest[14], m_digest[15]);    return s;}void QMD5::hexDigest(QCString& s){    finalize();    s.resize(33);    sprintf(s.data(), "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",            m_digest[0], m_digest[1], m_digest[2], m_digest[3], m_digest[4], m_digest[5],            m_digest[6], m_digest[7], m_digest[8], m_digest[9], m_digest[10], m_digest[11],            m_digest[12], m_digest[13], m_digest[14], m_digest[15]);}QCString QMD5::base64Digest(){    QByteArray ba(16);    finalize();    memcpy(ba.data(), m_digest, 16);    return QCodecs::base64Encode(ba);}void QMD5::init(){    d = 0;    reset();}void QMD5::reset(){    m_finalized = false;    m_count[0] = 0;    m_count[1] = 0;    m_state[0] = 0x67452301;    m_state[1] = 0xefcdab89;    m_state[2] = 0x98badcfe;    m_state[3] = 0x10325476;    memset ( m_buffer, 0, sizeof(*m_buffer));    memset ( m_digest, 0, sizeof(*m_digest));}void QMD5::transform( const unsigned char block[64] ){    Q_UINT32 a = m_state[0], b = m_state[1], c = m_state[2], d = m_state[3], x[16];    decode (x, block, 64);    //memcpy( x, block, 64 );    Q_ASSERT(!m_finalized);  // not just a user error, since the method is private    /* Round 1 */    FF (a, b, c, d, x[ 0], QMD5_S11, 0xd76aa478); /* 1 */    FF (d, a, b, c, x[ 1], QMD5_S12, 0xe8c7b756); /* 2 */    FF (c, d, a, b, x[ 2], QMD5_S13, 0x242070db); /* 3 */    FF (b, c, d, a, x[ 3], QMD5_S14, 0xc1bdceee); /* 4 */    FF (a, b, c, d, x[ 4], QMD5_S11, 0xf57c0faf); /* 5 */    FF (d, a, b, c, x[ 5], QMD5_S12, 0x4787c62a); /* 6 */    FF (c, d, a, b, x[ 6], QMD5_S13, 0xa8304613); /* 7 */    FF (b, c, d, a, x[ 7], QMD5_S14, 0xfd469501); /* 8 */    FF (a, b, c, d, x[ 8], QMD5_S11, 0x698098d8); /* 9 */    FF (d, a, b, c, x[ 9], QMD5_S12, 0x8b44f7af); /* 10 */    FF (c, d, a, b, x[10], QMD5_S13, 0xffff5bb1); /* 11 */    FF (b, c, d, a, x[11], QMD5_S14, 0x895cd7be); /* 12 */    FF (a, b, c, d, x[12], QMD5_S11, 0x6b901122); /* 13 */    FF (d, a, b, c, x[13], QMD5_S12, 0xfd987193); /* 14 */    FF (c, d, a, b, x[14], QMD5_S13, 0xa679438e); /* 15 */    FF (b, c, d, a, x[15], QMD5_S14, 0x49b40821); /* 16 */    /* Round 2 */    GG (a, b, c, d, x[ 1], QMD5_S21, 0xf61e2562); /* 17 */    GG (d, a, b, c, x[ 6], QMD5_S22, 0xc040b340); /* 18 */    GG (c, d, a, b, x[11], QMD5_S23, 0x265e5a51); /* 19 */    GG (b, c, d, a, x[ 0], QMD5_S24, 0xe9b6c7aa); /* 20 */    GG (a, b, c, d, x[ 5], QMD5_S21, 0xd62f105d); /* 21 */    GG (d, a, b, c, x[10], QMD5_S22,  0x2441453); /* 22 */    GG (c, d, a, b, x[15], QMD5_S23, 0xd8a1e681); /* 23 */    GG (b, c, d, a, x[ 4], QMD5_S24, 0xe7d3fbc8); /* 24 */    GG (a, b, c, d, x[ 9], QMD5_S21, 0x21e1cde6); /* 25 */    GG (d, a, b, c, x[14], QMD5_S22, 0xc33707d6); /* 26 */    GG (c, d, a, b, x[ 3], QMD5_S23, 0xf4d50d87); /* 27 */    GG (b, c, d, a, x[ 8], QMD5_S24, 0x455a14ed); /* 28 */    GG (a, b, c, d, x[13], QMD5_S21, 0xa9e3e905); /* 29 */    GG (d, a, b, c, x[ 2], QMD5_S22, 0xfcefa3f8); /* 30 */    GG (c, d, a, b, x[ 7], QMD5_S23, 0x676f02d9); /* 31 */    GG (b, c, d, a, x[12], QMD5_S24, 0x8d2a4c8a); /* 32 */    /* Round 3 */    HH (a, b, c, d, x[ 5], QMD5_S31, 0xfffa3942); /* 33 */    HH (d, a, b, c, x[ 8], QMD5_S32, 0x8771f681); /* 34 */    HH (c, d, a, b, x[11], QMD5_S33, 0x6d9d6122); /* 35 */    HH (b, c, d, a, x[14], QMD5_S34, 0xfde5380c); /* 36 */    HH (a, b, c, d, x[ 1], QMD5_S31, 0xa4beea44); /* 37 */    HH (d, a, b, c, x[ 4], QMD5_S32, 0x4bdecfa9); /* 38 */    HH (c, d, a, b, x[ 7], QMD5_S33, 0xf6bb4b60); /* 39 */    HH (b, c, d, a, x[10], QMD5_S34, 0xbebfbc70); /* 40 */    HH (a, b, c, d, x[13], QMD5_S31, 0x289b7ec6); /* 41 */    HH (d, a, b, c, x[ 0], QMD5_S32, 0xeaa127fa); /* 42 */    HH (c, d, a, b, x[ 3], QMD5_S33, 0xd4ef3085); /* 43 */    HH (b, c, d, a, x[ 6], QMD5_S34,  0x4881d05); /* 44 */    HH (a, b, c, d, x[ 9], QMD5_S31, 0xd9d4d039); /* 45 */    HH (d, a, b, c, x[12], QMD5_S32, 0xe6db99e5); /* 46 */    HH (c, d, a, b, x[15], QMD5_S33, 0x1fa27cf8); /* 47 */    HH (b, c, d, a, x[ 2], QMD5_S34, 0xc4ac5665); /* 48 */    /* Round 4 */    II (a, b, c, d, x[ 0], QMD5_S41, 0xf4292244); /* 49 */    II (d, a, b, c, x[ 7], QMD5_S42, 0x432aff97); /* 50 */    II (c, d, a, b, x[14], QMD5_S43, 0xab9423a7); /* 51 */    II (b, c, d, a, x[ 5], QMD5_S44, 0xfc93a039); /* 52 */    II (a, b, c, d, x[12], QMD5_S41, 0x655b59c3); /* 53 */    II (d, a, b, c, x[ 3], QMD5_S42, 0x8f0ccc92); /* 54 */    II (c, d, a, b, x[10], QMD5_S43, 0xffeff47d); /* 55 */    II (b, c, d, a, x[ 1], QMD5_S44, 0x85845dd1); /* 56 */    II (a, b, c, d, x[ 8], QMD5_S41, 0x6fa87e4f); /* 57 */    II (d, a, b, c, x[15], QMD5_S42, 0xfe2ce6e0); /* 58 */    II (c, d, a, b, x[ 6], QMD5_S43, 0xa3014314); /* 59 */    II (b, c, d, a, x[13], QMD5_S44, 0x4e0811a1); /* 60 */    II (a, b, c, d, x[ 4], QMD5_S41, 0xf7537e82); /* 61 */    II (d, a, b, c, x[11], QMD5_S42, 0xbd3af235); /* 62 */    II (c, d, a, b, x[ 2], QMD5_S43, 0x2ad7d2bb); /* 63 */    II (b, c, d, a, x[ 9], QMD5_S44, 0xeb86d391); /* 64 */    m_state[0] += a;    m_state[1] += b;    m_state[2] += c;    m_state[3] += d;    memset ( static_cast<void *>(x), 0, sizeof(x) );}inline Q_UINT32 QMD5::rotate_left (Q_UINT32 x, Q_UINT32 n){    return (x << n) | (x >> (32-n))  ;}inline Q_UINT32 QMD5::F (Q_UINT32 x, Q_UINT32 y, Q_UINT32 z){    return (x & y) | (~x & z);}inline Q_UINT32 QMD5::G (Q_UINT32 x, Q_UINT32 y, Q_UINT32 z){    return (x & z) | (y & ~z);}inline Q_UINT32 QMD5::H (Q_UINT32 x, Q_UINT32 y, Q_UINT32 z){    return x ^ y ^ z;}inline Q_UINT32 QMD5::I (Q_UINT32 x, Q_UINT32 y, Q_UINT32 z){    return y ^ (x | ~z);}void QMD5::FF ( Q_UINT32& a, Q_UINT32 b, Q_UINT32 c, Q_UINT32 d,                       Q_UINT32 x, Q_UINT32  s, Q_UINT32 ac ){    a += F(b, c, d) + x + ac;    a = rotate_left (a, s) +b;}void QMD5::GG ( Q_UINT32& a, Q_UINT32 b, Q_UINT32 c, Q_UINT32 d,                 Q_UINT32 x, Q_UINT32 s, Q_UINT32 ac){    a += G(b, c, d) + x + ac;    a = rotate_left (a, s) +b;}void QMD5::HH ( Q_UINT32& a, Q_UINT32 b, Q_UINT32 c, Q_UINT32 d,                 Q_UINT32 x, Q_UINT32 s, Q_UINT32 ac ){    a += H(b, c, d) + x + ac;    a = rotate_left (a, s) +b;}void QMD5::II ( Q_UINT32& a, Q_UINT32 b, Q_UINT32 c, Q_UINT32 d,                 Q_UINT32 x, Q_UINT32 s, Q_UINT32 ac ){    a += I(b, c, d) + x + ac;    a = rotate_left (a, s) +b;}void QMD5::encode ( unsigned char* output, Q_UINT32 *in, Q_UINT32 len ){#if !defined(WORDS_BIGENDIAN)    memcpy(output, in, len);#else    Q_UINT32 i, j;    for (i = 0, j = 0; j < len; i++, j += 4)    {        output[j]   = static_cast<Q_UINT8>((in[i] & 0xff));        output[j+1] = static_cast<Q_UINT8>(((in[i] >> 8) & 0xff));        output[j+2] = static_cast<Q_UINT8>(((in[i] >> 16) & 0xff));        output[j+3] = static_cast<Q_UINT8>(((in[i] >> 24) & 0xff));    }#endif}// Decodes in (Q_UINT8) into output (Q_UINT32). Assumes len is a// multiple of 4.void QMD5::decode (Q_UINT32 *output, const unsigned char* in, Q_UINT32 len){#if !defined(WORDS_BIGENDIAN)    memcpy(output, in, len);#else    Q_UINT32 i, j;    for (i = 0, j = 0; j < len; i++, j += 4)        output[i] = static_cast<Q_UINT32>(in[j]) |                    (static_cast<Q_UINT32>(in[j+1]) << 8)  |                    (static_cast<Q_UINT32>(in[j+2]) << 16) |                    (static_cast<Q_UINT32>(in[j+3]) << 24);#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -