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

📄 sha.c

📁 一个sha 哈希密码支撑算法系列的程序 包括了sha1,sha256,sha384和sha512算法
💻 C
字号:
/*- * Copyright (c) 2001-2003 Allan Saddi <allan@saddi.com> * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY ALLAN SADDI AND HIS CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL ALLAN SADDI OR HIS CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * $Id: sha.c 351 2003-02-23 23:24:40Z asaddi $ */#ifdef HAVE_CONFIG_H#include <config.h>#endif /* HAVE_CONFIG_H */#if HAVE_INTTYPES_H# include <inttypes.h>#else# if HAVE_STDINT_H#  include <stdint.h># endif#endif#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#if HAVE_UNISTD_H#include <unistd.h>#endif /* HAVE_UNISTD_H */#include "sha1.h"#include "sha256.h"#include "sha384.h"#include "sha512.h"#include "version.h"#ifndef lintstatic const char rcsid[] =	"$Id: sha.c 351 2003-02-23 23:24:40Z asaddi $";#endif /* !lint */static char *prog;#define SHA_BUFFER_SIZE 65536static uint8_t *buffer;static intshaFile (char *name, FILE *f, int which){  union {    SHA1Context sha1;    SHA256Context sha256;    SHA384Context sha384;    SHA512Context sha512;  } s;  size_t len;  uint8_t hash[SHA512_HASH_SIZE];  int hashLen, i;  int success = 1;  switch (which) {  case 1:    SHA1Init (&s.sha1);    break;  case 2:    SHA256Init (&s.sha256);    break;  case 3:    SHA384Init (&s.sha384);    break;  case 5:    SHA512Init (&s.sha512);    break;  default:    abort ();  }  while ((len = fread (buffer, 1, SHA_BUFFER_SIZE, f)) > 0) {    switch (which) {    case 1:      SHA1Update (&s.sha1, buffer, len);      break;    case 2:      SHA256Update (&s.sha256, buffer, len);      break;    case 3:      SHA384Update (&s.sha384, buffer, len);      break;    case 5:      SHA512Update (&s.sha512, buffer, len);      break;    default:      abort ();    }  }  if (ferror (f)) {#if HAVE_STRERROR    fprintf (stderr, "%s: %s: %s\n", prog, name ? name : "stdin",	     strerror (errno));#else    fprintf (stderr, "%s: %s: %s\n", prog, name ? name : "stdin",	     "Read error");#endif    success = 0;  }  else {    switch (which) {    case 1:      SHA1Final (&s.sha1, hash);      hashLen = SHA1_HASH_SIZE;      break;    case 2:      SHA256Final (&s.sha256, hash);      hashLen = SHA256_HASH_SIZE;      break;    case 3:      SHA384Final (&s.sha384, hash);      hashLen = SHA384_HASH_SIZE;      break;    case 5:      SHA512Final (&s.sha512, hash);      hashLen = SHA512_HASH_SIZE;      break;    default:      abort ();    }    for (i = 0; i < hashLen; i++)      printf ("%02x", hash[i]);    if (name)      printf (" %s\n", name);    else      printf ("\n");  }  memset (&s, 0, sizeof (s));  return success;}static voidhelp (int which){  fprintf (stderr, "\nOptions:\n"	   "\t-1\tUse SHA-1 %s\n"	   "\t-2\tUse SHA-256 %s\n"	   "\t-3\tUse SHA-384 %s\n"	   "\t-5\tUse SHA-512 %s\n"	   "\t-V\tDisplay version information\n"	   "\t-h\tDisplay this summary\n\n"	   "Only one of -1, -2, -3, -5 may be specified\n",	   which == 1 ? "(Default)" : "",	   which == 2 ? "(Default)" : "",	   which == 3 ? "(Default)" : "",	   which == 5 ? "(Default)" : "");}static voidusage (void){  fprintf (stderr, "Usage: %s [-1235Vh] [file ...]\n", prog);}static voidburnBuffer (void){  memset (buffer, 0, SHA_BUFFER_SIZE);}intmain (int argc, char *argv[]){  int ch;  char *whichStr;  int whichDef = 1;  int which = 0;  long offs;  int i;  FILE *f;  int failure = 0;  prog = argv[0];  if ((whichStr = getenv ("SHA_DEFAULT")) && *whichStr) {    switch (*whichStr) {    case '1':      whichDef = 1;      break;    case '2':      whichDef = 2;      break;    case '3':      whichDef = 3;      break;    case '5':      whichDef = 5;      break;    }  }  while ((ch = getopt (argc, argv, "1235Vh")) != -1) {    switch (ch) {    case '1':    case '2':    case '3':    case '5':      if (!which)	which = ch - '0';      else {	usage ();	help (whichDef);	exit (1);      }      break;    case 'V':      fprintf (stderr, "%s version " VERSION_STRING " (" VERSION_DATE ")\n",	       prog);      exit (1);    case 'h':      usage ();      help (whichDef);      exit (1);    case '?':    default:      usage ();      exit (1);    }  }  argc -= optind;  argv += optind;  if (!which)    which = whichDef;  /* Allocate a suitable buffer. */  if (!(buffer = malloc (SHA_BUFFER_SIZE + 7))) {    perror (prog);    exit (1);  }  /* Ensure it is on a 64-bit boundary. */  if ((offs = (long) buffer & 7L))    buffer += 8 - offs;  atexit (burnBuffer);  /* If given no arguments, process stdin. */  if (!argc) {    if (shaFile (NULL, stdin, which))      exit (0);    else      exit (1);  }  for (i = 0; i < argc; i++) {    if ((f = fopen (argv[i], "rb"))) {      if (!shaFile (argv[i], f, which))	failure = 1;      fclose (f);    }    else {#if HAVE_STRERROR      fprintf (stderr, "%s: %s: %s\n", prog, argv[i], strerror (errno));#else      fprintf (stderr, "%s: %s: %s\n", prog, argv[i],	       "No such file or directory");#endif      failure = 1;    }  }  exit (failure);}

⌨️ 快捷键说明

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