Реализован ли алгоритм CRC Office в C # - PullRequest
0 голосов
/ 28 декабря 2010

Я ищу реализацию алгоритма crc, определенного в Microsoft Office

http://msdn.microsoft.com/en-us/library/dd922675.aspx

Он уже где-то реализован?

Ответы [ 2 ]

0 голосов
/ 28 мая 2011

Не проверено, но 15 минут и статья в офисе предполагает, что это должно сработать. Учитывая, что исходный источник позволяет вызывающей стороне заполнять алгоритм с любым начальным значением, которое они хотят, я не могу гарантировать, что результаты будут соответствовать тому, что вы ищете: MS Office мог бы запустить вычисление CRC с 32-битными случайными числами. энтропия. Ничто не говорит о том, что вычисление должно выполняться с начальным значением 0.

public class MsoCrc32
{
  private const int BUFFER_SIZE =  4096 ;
  private static readonly uint[] cache ;

  public uint Value { get ; private set ; }

  public void Add( byte[] bytes )
  {
    foreach ( byte octet in bytes )
    {
      uint i = ( Value >> 24 ) ^ octet ;

      Value <<= 8        ;
      Value  ^= cache[i] ;

    }

    return ;
  }
  public void Add( Stream s )
  {
    byte[] buffer = new byte[BUFFER_SIZE] ;
    int    bufl   = 0 ;

    while ( (bufl=s.Read(buffer,0,buffer.Length)) > 0 )
    {
      Add( buffer ) ;
    }

    return ;
  }

  public MsoCrc32() : this(0)
  {
  }
  public MsoCrc32( int value )
  {
    this.Value = (uint) value ;
  }
  static MsoCrc32()
  {
    cache = InitCache();
    return ;
  }

  private static uint[] InitCache()
  {
    uint[] cacheInstance = new uint[256] ;

    for ( uint i = 0 ; i < cache.Length ; ++i )
    {
      uint value = i << 24 ;

      for ( uint j = 0 ; j < 8 ; ++j )
      {
        value <<= 1 ;
        if ( 0x80000000 == (value&0x80000000) )
        {
          value  ^= 0xAF000000 ;
        }
      }

      value &= 0xFFFF0000 ;

      cacheInstance[i] = value ;

    }

    return cacheInstance ;
  }

}
0 голосов
/ 28 декабря 2010

Я могу ошибаться, но я думаю, что если вы уточните свой поиск, чтобы найти Microsoft Office CRC СОЛЬ , вам повезет больше.

Короче говоря, алгоритм CRC должен быть таким же, как и любой другой, но иногда программы имеют свой собственный SALT, чтобы "оживить" алгоритм хеширования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...