Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Simple MD5 implementation
- *
- * Compile with: gcc -o md5 -O3 -lm md5.c
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdint.h>
- void md5(uint8_t *initial_msg, size_t initial_len) {
- // Message (to prepare)
- uint8_t *msg = NULL;
- // Note: All variables are unsigned 32 bit and wrap modulo 2^32 when calculating
- int new_len;
- for(new_len = initial_len*8 + 1; new_len%512!=448; new_len++);
- new_len /= 8;
- msg = calloc(new_len + 64, 1); // also appends "0" bits
- // (we alloc also 64 extra bytes...)
- memcpy(msg, initial_msg, initial_len);
- msg[initial_len] = 128; // write the "1" bit
- uint32_t bits_len = 8*initial_len; // note, we append the len
- memcpy(msg + new_len, &bits_len, 4);
- int main(int argc, char **argv) {
- if (argc < 2) {
- printf("usage: %s 'string'\n", argv[0]);
- return 1;
- }
- char *msg = argv[1];
- size_t len = strlen(msg);
- // benchmark
- int i;
- for (i = 0; i < 1000000; i++) {
- md5(msg, len);
- }
- //var char digest[16] := h0 append h1 append h2 append h3 //(Output is in little-endian)
- uint8_t *p;
- // display result
- //p=(uint8_t *)&h0;
- printf("%2.2x%2.2x%2.2x%2.2x", *msg);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement