Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Deck of Cards
id001
Card
defaulttrue
labelC
Code Block
languagecpp
DWORD GRD_API GrdCRC (	
  void *pData,
  DWORD dwLng,
  DWORD dwPrevCRC
);	
Expand
titleПараметры функции

pData

адрес участка памяти для подсчета CRC

dwLng

длина (в байтах) участка памяти

dwPrevCRC

CRC предыдущего участка памяти, при последовательном вычислении CRC для нескольких буферов

Expand
titleВозвращаемое значение функции

32-битный (4 байта) CRC участка памяти.

Card
labelC#
Code Block
languagec#
public static unsafe uint GrdCRC(byte[] data)
public static unsafe uint GrdCRC(byte[] data, uint prevCRC)
public static unsafe uint GrdCRC(short[] data)
public static unsafe uint GrdCRC(short[] data, uint prevCRC)
public static unsafe uint GrdCRC(ushort[] data)
public static unsafe uint GrdCRC(ushort[] data, uint prevCRC)
public static unsafe uint GrdCRC(int[] data)
public static unsafe uint GrdCRC(int[] data, uint prevCRC)
public static unsafe uint GrdCRC(uint[] data)
public static unsafe uint GrdCRC(uint[] data, uint prevCRC)
public static unsafe uint GrdCRC(long[] data)
public static unsafe uint GrdCRC(long[] data, uint prevCRC)
public static unsafe uint GrdCRC(ulong[] data)
public static unsafe uint GrdCRC(ulong[] data, uint prevCRC)
Wiki Markup
{dojo-tabs:theme=tundra|id=1}
{dojo-tab:title=C|selected=true}
*C*
DWORD GRD_API GrdCRC (	
  void *pData,
  DWORD dwLng,
  DWORD dwPrevCRC
);	
{dojo-tab}
{dojo-tab:title=C#|selected=true}
*C#*

{dojo-tab}
{dojo-tab:title=Visual Basic (Declaration)}
*Visual Basic*

{dojo-tab}
{dojo-tab:title=Visual C++}
*Visual C++*

{dojo-tab}
{dojo-tabs}
Expand
titleВходные параметры

pData

адрес участка памяти для подсчета CRC

dwLng

длина (в байтах) участка памяти

dwPrevCRC

CRC предыдущего участка памяти, при последовательном вычислении CRC для нескольких буферов

Expand
titleПараметры метода

 

Expand
titleВозвращаемое значение метода

 

Card
labelJava
Code Block
languagejava
 
Expand
titleПараметры метода

 

Expand
titleВозвращаемое значение метода

 

Expand
titleВыходные параметры
32-битный (4 байта) CRC участка памяти.

Expand
titleОписание

Функция GrdCRC позволяет подсчитать CRC (циклический избыточный код) участка памяти или буфера. CRC обычно используется как контрольная сумма каких-либо данных (изменение хотя бы одного бита данных, с приемлемой в большинстве случаев вероятностью, приведет к существенному изменению значения CRC). Параметр pData задает адрес участка памяти, а dwLng - длину этого участка в байтах. Если необходимо подсчитать общий CRC нескольких участков, в параметр dwPrevCRC при подсчете CRC каждого следующего участка нужно занести CRC, подсчитанный на предыдущем этапе. Иначе параметр dwPrevCRC должен содержать -1 (константа Grd_StartCRC). Функция GrdCRC не возвращает никакого кода ошибки.

Данная функция удобна, например, для контроля результатов расшифровки блоков данных без непосредственного сравнения с эталоном. Если эталон дешифрованых данных присутствует в коде приложения, то хакер может найти его и легко восстановить оригинальный вид данных. Однако надо понимать, что и по значению CRC небольших блоков данных, за счет содержащейся в нем избыточности, возможно его реверсирование (т.е. восстановление оригинальных данных по их CRC). Поэтому в критичных для этого случаях лучше использовать функцию GrdHashGrdHashEx для подсчета 256-битного SHA-хэша, который лучше защищен от подобных атак.

Expand
titleПример

Пример для используемого средства разработки см. в директории:

"\%Program Files%\Guardant\Guardant 6\%PublicCode%\Samples\x86\Win32\General Guardant API\"
или
"\%Program Files%\Guardant\Guardant 6\%Public Code%\Samples\x64\Win64\General Guardant API\"