저는 CRC를 배웠습니다. 어디서나 CRC128 및 CRC256 코드를 찾을 수 없습니다. 누구든지 C++ 또는 C# 코드를 갖고 있다면 나와 공유하십시오. 또한 웹 사이트에 대한 온라인 링크를 제공하십시오. 나는 초보자이며 전혀 코딩 할 수 없으며 이론과 수학을 코딩으로 변환 할 수 없습니다. 그래서 나는 너에게 도움을 청한다. 나에게 적절하고 간단한 코드를 제공하는 것은 당신의 친절 할 것입니다. 누구든지 나에게이 코드를 제공하면 CRC 테이블 생성기 기능도 제공하십시오. 고맙습니다.누구든지 C++ 및 C#에서 CRC128 및 CRC256 코드가 있습니까?
답변
CRC-128과 CRC-256이 정의되었지만 실제로 사용하는 사람은 누구인지 알 수 없습니다.
대부분의 경우 CRC를 사용한다고 생각하는 개발자는 실제로 많은 응용 프로그램에서 CRC를 성공한 cryptographic hash function을 사용해야합니다. CRC-128 또는 CRC-256이 깨진 MD5보다 우수하고 SHA-2 패밀리가 훨씬 적다는 것은 드문 경우입니다.
다음은 최근에 CRC로 재생할 때 작성한 Java 클래스입니다. 비트 순서 변경은 비트 연산에만 구현된다는 점에 유의하십시오.
/**
* A CRC algorithm for computing check values.
*/
public class Crc
{
public static final Crc CRC_16_CCITT =
new Crc(16, 0x1021, 0xffff, 0xffff, true);
public static final Crc CRC_32 =
new Crc(32, 0x04c11db7, 0xffffffffL, 0xffffffffL, true);
private final int _width;
private final long _polynomial;
private final long _mask;
private final long _highBitMask;
private final long _preset;
private final long _postComplementMask;
private final boolean _msbFirstBitOrder;
private final int _shift;
private final long[] _crcs;
/**
* Constructs a CRC specification.
*
* @param width
* @param polynomial
* @param msbFirstBitOrder
*/
public Crc(
int width,
long polynomial)
{
this(width, polynomial, 0, 0, true);
}
/**
* Constructs a CRC specification.
*
* @param width
* @param polynomial
* @param msbFirstBitOrder
*/
public Crc(
int width,
long polynomial,
long preset,
long postComplementMask,
boolean msbFirstBitOrder)
{
super();
_width = width;
_polynomial = polynomial;
_mask = (1L << width) - 1;
_highBitMask = (1L << (width - 1));
_preset = preset;
_postComplementMask = postComplementMask;
_msbFirstBitOrder = msbFirstBitOrder;
_shift = _width - 8;
_crcs = new long[256];
for (int i = 0; i < 256; i++)
{
_crcs[i] = crcForByte(i);
}
}
/**
* Gets the width.
*
* @return The width.
*/
public int getWidth()
{
return _width;
}
/**
* Gets the polynomial.
*
* @return The polynomial.
*/
public long getPolynomial()
{
return _polynomial;
}
/**
* Gets the mask.
*
* @return The mask.
*/
public long getMask()
{
return _mask;
}
/**
* Gets the preset.
*
* @return The preset.
*/
public long getPreset()
{
return _preset;
}
/**
* Gets the post-complement mask.
*
* @return The post-complement mask.
*/
public long getPostComplementMask()
{
return _postComplementMask;
}
/**
* @return True if this CRC uses MSB first bit order.
*/
public boolean isMsbFirstBitOrder()
{
return _msbFirstBitOrder;
}
public long computeBitwise(byte[] message)
{
long result = _preset;
for (int i = 0; i < message.length; i++)
{
for (int j = 0; j < 8; j++)
{
final int bitIndex = _msbFirstBitOrder ? 7 - j : j;
final boolean messageBit = (message[i] & (1 << bitIndex)) != 0;
final boolean crcBit = (result & _highBitMask) != 0;
result <<= 1;
if (messageBit^crcBit)
{
result ^= _polynomial;
}
result &= _mask;
}
}
return result^_postComplementMask;
}
public long compute(byte[] message)
{
long result = _preset;
for (int i = 0; i < message.length; i++)
{
final int b = (int) (message[i]^(result >>> _shift)) & 0xff;
result = ((result << 8)^_crcs[b]) & _mask;
}
return result^_postComplementMask;
}
private long crcForByte(int b)
{
long result1 = (b & 0xff) << _shift;
for (int j = 0; j < 8; j++)
{
final boolean crcBit = (result1 & (1L << (_width - 1))) != 0;
result1 <<= 1;
if (crcBit)
{
result1 ^= _polynomial;
}
result1 &= _mask;
}
return result1;
}
public String crcTable()
{
final int digits = (_width + 3)/4;
final int itemsPerLine = (digits + 4) * 8 < 72 ? 8 : 4;
final String format = "0x%0" + digits + "x, ";
final StringBuilder builder = new StringBuilder();
builder.append("{\n");
for (int i = 0; i < _crcs.length; i += itemsPerLine)
{
builder.append(" ");
for (int j = i; j < i + itemsPerLine; j++)
{
builder.append(String.format(format, _crcs[j]));
}
builder.append("\n");
}
builder.append("}\n");
return builder.toString();
}
}
이 코드에 회신 해 주셔서 감사합니다. CRC128 또는 CRC256에 맞는 C# 호환 코드가 필요합니다. – Tush
CRC-128 및 CRC-256 다음 세 가지 점에 해당하는 경우에만 의미가 :
- 당신은 암호 해시 크게 당신에게
- 속도를 느리게하는 위치에 구속 CPU입니다 사고 충돌이 통계적으로
- OTOH 고의적 인 충돌이 문제
2와 3이 함께 적용될 수있는 전형적인 경우는 실수로 인한 충돌로 인해 플랫폼이 아닌 데이터의 보낸 사람에게만 영향을주는 데이터 손실이 발생하는 경우입니다.
실수로 충돌 비율이 32 비트 및 64 비트 CRC의 경우 각각 2^32 또는 1^2^64 이상임을 제외하고는 동의합니다.
추적 항목에 대한 CRC 값으로 사물을 추적하는 앱을 작성했습니다. 우리는 잠재적으로 수백만 개의 아이템을 추적 할 필요가있었습니다. 실제 시나리오에서 충돌 속도가 약 1^2^16 인 CRC32로 시작했는데 이는 불쾌한 놀라움이었습니다. 그런 다음 실제 충돌 속도가 약 1/2^23 인 CRC64를 사용하도록 다시 코딩했습니다. 우리가 시작한 32 비트의 불쾌한 놀라움과 64 비트의 작은 오류율을 받아 들인 후에 이것을 테스트했습니다.
예상되는 충돌 속도 뒤에 통계를 설명 할 수는 없지만 비트의 너비보다 훨씬 빨리 충돌이 발생한다는 것은 의미가 있습니다. 해시 테이블처럼 ... 일부 해시 버킷은 비어 있고 다른 항목은 하나 이상의 항목이 있습니다.
256 비트 CRC의 경우에도 처음 2 개의 CRC는 동일 할 수 있습니다 ... 거의 믿을 수 있지만 가능한.
- 1. 수레는 C에서 반올림되고 ++ 및
- 2. C에서 StreamReader 및 버퍼 #
- 3. 누구든지 WEbAii, Watin 및 Selenuim에 대한 제안 사항이 있습니까
- 4. C++ 코드 및 C?
- 5. C에서 과부하 및 동적 키워드
- 6. Unix 및 C에서 출력 리디렉션
- 7. 누구든지 math.net을 사용하여 어떤 경험을 가지고 있습니까
- 8. C++ 논리 및 연산자
- 9. 차이 (++ i) 및 (내가 ++) C에서
- 10. C, HTML 및 CGI
- 11. Gimpel의 PC 보풀 및 Flexelint; 누구든지 사용 했나요?
- 12. C에서 코드 삽입 이해 및 수행
- 13. C, Cygwin 및 drand 및 srand 컴파일
- 14. C에서 메모리 및 CPU 표시하기 Q
- 15. Silverlight (C#) 및 레거시 ASP.NET (VB.NET) 코드가 포함 된 Masterpage
- 16. C++ 열거 redefenition 및 C++
- 17. C에서 텍스트 찾기 및 바꾸기
- 18. extern "C"는 C에서 어떤 효과가 있습니까?
- 19. C에서 폴더 압축 및 압축 풀기 #
- 20. 임베디드 MySQL (libmysql.dll) 및 C# 및 Asp.Net
- 21. VB.NET에서 찾지 못했던 C 언어의 코드가 있습니까?
- 22. 이 코드가 다른 값을 반환하는 이유는 무엇입니까? (C# 및 VB.NET)
- 23. Qt의 일반 C++ 코드가 빌드 및 실행되지 않습니다.
- 24. C에서 SerialPort 및 스레드로 "안전한 핸들이 닫혔습니다."
- 25. C에서 XML 및 XML 스키마를 사용하는 방법
- 26. 누구든지 .NET의 System.IO.IsolatedStorage를 사용합니까?
- 27. 누구든지 내 문제를 파악할 수 있습니까 [파이썬]
- 28. .Net 및 C에서 코드 성능을위한 도구 #
- 29. 자바에서 base64 인코딩 및 C에서 디코딩
- 30. C : sprintf 및 recursion
위키피디아는 CRC-128과 CRC-256을 "기술적으로 무능함"이라고 부릅니다. http://en.wikipedia.org/wiki/Cyclic_redundancy_check#Commonly_used_and_standardized_CRCs –