Write a c program that calculates the crc32 hash of the string "correct horse battery staple" and prints it to stdout. Dont call any builtin crc32 functions.
Write a c program that calculates the crc32 hash of the string "correct horse battery staple" and prints it to stdout. Dont call any builtin crc32 functions.
# CRC32 Calculator for "correct horse battery staple" Here's a C program that calculates the CRC32 hash of the given string without using any built-in CRC32 functions:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include <stdio.h> #include <stdint.h> #include <string.h> // Function to calculate CRC32 hash uint32_t calculate_crc32(const char *data, size_t length) { // Initialize with all 1's (0xFFFFFFFF) uint32_t crc = 0xFFFFFFFF; // Process each byte in the input string for (size_t i = 0; i < length; i++) { // XOR the byte with the lowest byte of the CRC crc ^= (uint8_t)data[i]; // Process each bit for (int j = 0; j < 8; j++) { // If the LSB is 1, shift right and XOR with the polynomial if (crc & 1) { crc = (crc >> 1) ^ 0xEDB88320; // CRC32 polynomial } else { // Otherwise just shift right crc = crc >> 1; } } } // Final XOR with all 1's return crc ^ 0xFFFFFFFF; } int main() { const char *input = "correct horse battery staple"; uint32_t crc = calculate_crc32(input, strlen(input)); // Print the result in hexadecimal printf("0x%08X\n", crc); return 0; } |
I extracted the following code from that output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include <stdio.h> #include <stdint.h> #include <string.h> // Function to calculate CRC32 hash uint32_t calculate_crc32(const char *data, size_t length) { // Initialize with all 1's (0xFFFFFFFF) uint32_t crc = 0xFFFFFFFF; // Process each byte in the input string for (size_t i = 0; i < length; i++) { // XOR the byte with the lowest byte of the CRC crc ^= (uint8_t)data[i]; // Process each bit for (int j = 0; j < 8; j++) { // If the LSB is 1, shift right and XOR with the polynomial if (crc & 1) { crc = (crc >> 1) ^ 0xEDB88320; // CRC32 polynomial } else { // Otherwise just shift right crc = crc >> 1; } } } // Final XOR with all 1's return crc ^ 0xFFFFFFFF; } int main() { const char *input = "correct horse battery staple"; uint32_t crc = calculate_crc32(input, strlen(input)); // Print the result in hexadecimal printf("0x%08X\n", crc); return 0; } |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include <stdio.h> #include <stdint.h> #include <string.h> // Function to calculate CRC32 hash uint32_t calculate_crc32(const char *data, size_t length) { // Initialize with all 1's (0xFFFFFFFF) uint32_t crc = 0xFFFFFFFF; // Process each byte in the input string for (size_t i = 0; i < length; i++) { // XOR the byte with the lowest byte of the CRC crc ^= (uint8_t)data[i]; // Process each bit for (int j = 0; j < 8; j++) { // If the LSB is 1, shift right and XOR with the polynomial if (crc & 1) { crc = (crc >> 1) ^ 0xEDB88320; // CRC32 polynomial } else { // Otherwise just shift right crc = crc >> 1; } } } // Final XOR with all 1's return crc ^ 0xFFFFFFFF; } int main() { const char *input = "correct horse battery staple"; uint32_t crc = calculate_crc32(input, strlen(input)); // Print the result in hexadecimal printf("0x%08X\n", crc); return 0; } |
0xCB7E6E10
Testing if the previous output contains the string cb7e6e10
: True
Write a c program that calculates the crc32 hash of the string "correct horse battery staple" and prints it to stdout. Dont call any builtin crc32 functions.
Write a c program that calculates the crc32 hash of the string "correct horse battery staple" and prints it to stdout. Dont call any builtin crc32 functions.
# CRC32 Implementation in C Here's a C program that calculates the CRC32 hash of "correct horse battery staple" without using any built-in CRC32 functions:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <stdio.h> #include <stdint.h> uint32_t calculate_crc32(const char *str) { uint32_t crc = 0xFFFFFFFF; const uint32_t polynomial = 0xEDB88320; // Standard CRC32 polynomial (reversed) // Process each byte in the input string for (size_t i = 0; str[i] != '\0'; i++) { crc ^= (uint8_t)str[i]; // Process each bit in the byte for (int j = 0; j < 8; j++) { if (crc & 1) { crc = (crc >> 1) ^ polynomial; } else { crc = crc >> 1; } } } // Final XOR value return crc ^ 0xFFFFFFFF; } int main() { const char *input = "correct horse battery staple"; uint32_t crc = calculate_crc32(input); printf("%08X\n", crc); return 0; } |
I extracted the following code from that output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <stdio.h> #include <stdint.h> uint32_t calculate_crc32(const char *str) { uint32_t crc = 0xFFFFFFFF; const uint32_t polynomial = 0xEDB88320; // Standard CRC32 polynomial (reversed) // Process each byte in the input string for (size_t i = 0; str[i] != '\0'; i++) { crc ^= (uint8_t)str[i]; // Process each bit in the byte for (int j = 0; j < 8; j++) { if (crc & 1) { crc = (crc >> 1) ^ polynomial; } else { crc = crc >> 1; } } } // Final XOR value return crc ^ 0xFFFFFFFF; } int main() { const char *input = "correct horse battery staple"; uint32_t crc = calculate_crc32(input); printf("%08X\n", crc); return 0; } |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <stdio.h> #include <stdint.h> uint32_t calculate_crc32(const char *str) { uint32_t crc = 0xFFFFFFFF; const uint32_t polynomial = 0xEDB88320; // Standard CRC32 polynomial (reversed) // Process each byte in the input string for (size_t i = 0; str[i] != '\0'; i++) { crc ^= (uint8_t)str[i]; // Process each bit in the byte for (int j = 0; j < 8; j++) { if (crc & 1) { crc = (crc >> 1) ^ polynomial; } else { crc = crc >> 1; } } } // Final XOR value return crc ^ 0xFFFFFFFF; } int main() { const char *input = "correct horse battery staple"; uint32_t crc = calculate_crc32(input); printf("%08X\n", crc); return 0; } |
CB7E6E10
Testing if the previous output contains the string cb7e6e10
: True