Инвертирование CRC32

//я использую этот плагин паузы, который я просто записал

$.fn.pause = function(duration) {
    $(this).animate({ dummy: 1 }, duration);
    return this;
};

Вызов это как это:

$("#mainImage").pause(5000).fadeOut();

Примечание: Вам не нужен обратный вызов.

9
задан pat 3 October 2009 в 15:26
поделиться

3 ответа

CRC32 является обратимым, только если исходная строка составляет 4 байта или меньше.

19
ответ дан 4 December 2019 в 08:33
поделиться

Кейд Ру прав насчет обращения CRC32.

Ссылки, которые вы упомянули, предоставляют решение для исправления CRC, ставшего недействительным, путем изменения исходного потока байтов. Это исправление достигается изменением некоторых (неважных) байтов и воссозданием исходного значения CRC.

0
ответ дан 4 December 2019 в 08:33
поделиться

Прочтите документ под названием «Обращение теории и практики CRC» .

Это C #:

public class Crc32
{
    public const uint poly = 0xedb88320;
    public const uint startxor = 0xffffffff;

    static uint[] table = null;
    static uint[] revtable = null;

    public void FixChecksum(byte[] bytes, int length, int fixpos, uint wantcrc)
    {
        if (fixpos + 4 > length) return;

        uint crc = startxor;
        for (int i = 0; i < fixpos; i++) {
            crc = (crc >> 8) ^ table[(crc ^ bytes[i]) & 0xff];
        }

        Array.Copy(BitConverter.GetBytes(crc), 0, bytes, fixpos, 4);

        crc = wantcrc ^ startxor;
        for (int i = length - 1; i >= fixpos; i--) {
            crc = (crc << 8) ^ revtable[crc >> (3 * 8)] ^ bytes[i];
        }

        Array.Copy(BitConverter.GetBytes(crc), 0, bytes, fixpos, 4);
    }

    public Crc32()
    {
        if (Crc32.table == null) {
            uint[] table = new uint[256];
            uint[] revtable = new uint[256];

            uint fwd, rev;
            for (int i = 0; i < table.Length; i++) {
                fwd = (uint)i;
                rev = (uint)(i) << (3 * 8);
                for (int j = 8; j > 0; j--) {
                    if ((fwd & 1) == 1) {
                        fwd = (uint)((fwd >> 1) ^ poly);
                    } else {
                        fwd >>= 1;
                    }

                    if ((rev & 0x80000000) != 0) {
                        rev = ((rev ^ poly) << 1) | 1;
                    } else {
                        rev <<= 1;
                    }
                }
                table[i] = fwd;
                revtable[i] = rev;
            }

            Crc32.table = table;
            Crc32.revtable = revtable;
        }
    }
}
5
ответ дан 4 December 2019 в 08:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: