?? md5_fmt.c
字號:
/* * This file is part of John the Ripper password cracker, * Copyright (c) 1996-98 by Solar Designer */#include <string.h>#include "arch.h"#include "misc.h"#include "MD5_std.h"#include "common.h"#include "formats.h"#define FORMAT_LABEL "md5"#define FORMAT_NAME "FreeBSD MD5"#define BENCHMARK_COMMENT ""#define PLAINTEXT_LENGTH 15#define CIPHERTEXT_LENGTH 22#define BINARY_SIZE 4#define SALT_SIZE 8#define MIN_KEYS_PER_CRYPT 1#define MAX_KEYS_PER_CRYPT 1static struct fmt_tests tests[] = { {"$1$12345678$aIccj83HRDBo6ux1bVx7D1", "0123456789ABCDE"}, {"$1$12345678$f8QoJuo0DpBRfQSD0vglc1", "12345678"}, {"$1$12345678$xek.CpjQUVgdf/P2N9KQf/", ""}, {"$1$1234$BdIMOAWFOV2AQlLsrN/Sw.", "1234"}, {NULL}};static char saved_key[PLAINTEXT_LENGTH + 1];static int valid(char *ciphertext){ char *pos, *start; if (strncmp(ciphertext, "$1$", 3)) return 0; for (pos = &ciphertext[3]; *pos && *pos != '$'; pos++); if (!*pos || pos < &ciphertext[4] || pos > &ciphertext[11]) return 0; start = ++pos; while (atoi64[(ARCH_INDEX)*pos] >= 0) pos++; return !*pos && pos - start == CIPHERTEXT_LENGTH;}static int binary_hash_0(void *binary){ return *(MD5_word *)binary & 0xF;}static int binary_hash_1(void *binary){ return *(MD5_word *)binary & 0xFF;}static int binary_hash_2(void *binary){ return *(MD5_word *)binary & 0xFFF;}static int get_hash_0(int index){ return MD5_out[0] & 0xF;}static int get_hash_1(int index){ return MD5_out[0] & 0xFF;}static int get_hash_2(int index){ return MD5_out[0] & 0xFFF;}static int salt_hash(void *salt){ return ((int)atoi64[(ARCH_INDEX)((char *)salt)[0]] | ((int)atoi64[(ARCH_INDEX)((char *)salt)[1]] << 6)) & 0x3FF;}static void set_key(char *key, int index){ MD5_std_set_key(key); strnfcpy(saved_key, key, PLAINTEXT_LENGTH);}static char *get_key(int index){ saved_key[PLAINTEXT_LENGTH] = 0; return saved_key;}static int cmp_all(void *binary, int index){ return *(MD5_word *)binary == MD5_out[0];}static int cmp_exact(char *source, int index){ return !memcmp(MD5_std_get_binary(source), MD5_out, sizeof(MD5_binary));}struct fmt_main fmt_MD5 = { { FORMAT_LABEL, FORMAT_NAME, MD5_ALGORITHM_NAME, BENCHMARK_COMMENT, PLAINTEXT_LENGTH, BINARY_SIZE, SALT_SIZE, MIN_KEYS_PER_CRYPT, MAX_KEYS_PER_CRYPT, tests }, { fmt_default_init, valid, fmt_default_split, (void *(*)(char *))MD5_std_get_binary, (void *(*)(char *))MD5_std_get_salt, { binary_hash_0, binary_hash_1, binary_hash_2 }, salt_hash, (void (*)(void *))MD5_std_set_salt, set_key, get_key, (void (*)(int))MD5_std_crypt, { get_hash_0, get_hash_1, get_hash_2 }, cmp_all, cmp_all, cmp_exact }};
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -