18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * hostapd - Plaintext password to NtPasswordHash 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2005, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details. 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "includes.h" 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "common.h" 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "crypto/ms_funcs.h" 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint main(int argc, char *argv[]) 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned char password_hash[16]; 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t i; 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *password, buf[64], *pos; 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (argc > 1) 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt password = argv[1]; 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt else { 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (fgets(buf, sizeof(buf), stdin) == NULL) { 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt printf("Failed to read password\n"); 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 1; 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt buf[sizeof(buf) - 1] = '\0'; 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos = buf; 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt while (*pos != '\0') { 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (*pos == '\r' || *pos == '\n') { 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *pos = '\0'; 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt break; 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pos++; 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt password = buf; 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (nt_password_hash((u8 *) password, strlen(password), password_hash)) 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt for (i = 0; i < sizeof(password_hash); i++) 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt printf("%02x", password_hash[i]); 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt printf("\n"); 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 48