⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ntpwdhash_main.c

📁 linux 下通过802.1认证的安装包
💻 C
字号:
/**
 *
 * Licensed under a dual GPL/BSD license. (See LICENSE file for more info.)
 *
 * \file ntpwdhash_main.c
 *
 * \author chris@open1x.org
 *
 * $Id: ntpwdhash_main.c,v 1.2.2.3 2007/02/07 07:17:41 chessing Exp $
 * $Date: 2007/02/07 07:17:41 $
 * $Log: ntpwdhash_main.c,v $
 * Revision 1.2.2.3  2007/02/07 07:17:41  chessing
 * Updated my e-mail address in all source files.  Replaced strcpy() with a safer version.  Updated Strncpy() to be a little safer.
 *
 **/
#include <openssl/ssl.h>
#include <string.h>

#ifndef WINDOWS
#include <strings.h>
#include <stdint.h>
#else
#define uint8_t unsigned char
#define u_int unsigned int
#endif

/**
 *  \brief  Take a character string, and put null characters in it to create a unicode
 *          string.
 *
 *  @param[in] non_uni   The non-unicode string that will be converted.
 *  
 *  \retval ptr   A pointer to the newly converted unicode string.
 *  \retval NULL   An error.
 **/
char *to_unicode(char *non_uni)
{
  char *retUni;
  int i;

  if (!non_uni)
    {
      printf("Invalid value passed in to to_unicode()! (%s:%d)\n", 
	     __FUNCTION__, __LINE__);
      return NULL;
    }

  retUni = (char *)malloc((strlen(non_uni)+1)*2);
  if (retUni == NULL)
    {
      printf("Error with MALLOC in to_unicode()! (%s:%d)\n", __FUNCTION__,
	     __LINE__);
      return NULL;
    }
  memset(retUni, 0x00, ((strlen(non_uni)+1)*2));

  for (i=0; i<strlen(non_uni); i++)
    {
      retUni[(2*i)] = non_uni[i];
    }
  return retUni;
}

/**
 * \brief Create the first hash needed to create an "NT password hash".
 *
 * @param[in] Password   A pointer to the ascii password to be hashed.
 * @param[out] PasswordHash   A pointer to a 16 byte buffer that will contain the resulting
 *                            password hash.
 **/
void NtPasswordHash(char *Password, char *PasswordHash)
{
  EVP_MD_CTX cntx;
  char retVal[20];
  int i, len;
  char *uniPassword;

  if ((!Password) || (!PasswordHash))
    {
      printf("Invalid data passed in to NtPasswordHash()! (%s:%d)\n",
	     __FUNCTION__, __LINE__);
      return;
    }

  memset(retVal, 0x00, 20);
  uniPassword = to_unicode(Password);
  len = (strlen(Password))*2;

  EVP_DigestInit(&cntx, EVP_md4());
  EVP_DigestUpdate(&cntx, uniPassword, len);
  EVP_DigestFinal(&cntx, (uint8_t *)&retVal, (u_int *)&i);
  memcpy(PasswordHash, &retVal, 16);
  free(uniPassword);
}

int main(int argc, char *argv[])
{
  char pwd_hash[16];
  int i;

  if (argc <= 1)
    {
      printf("ntpwdhash <password>\n");
      return 255;
    }

  NtPasswordHash(argv[1], (char *)&pwd_hash);

  printf("Resulting hash value (copy and paste to Xsupplicant configuration)"
	 " :\n");

  for (i=0;i<16;i++)
    {
      printf("%02X", (unsigned char)pwd_hash[i]);
    }
  printf("\n");

  return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -