Генератор пароля

Всё, что касается программирования на старых языках или для старых систем

Генератор пароля

Сообщение luzga » 07 июн 2026, 12:45

Программа генерирует пароль, начиная с трёх символов, максимальное, двенадцать. По-умолчанию, пароль генирируется из восьми символов.
После генерации, пароль скопирован в буфер обмена.
Программу можно собрать компиляторами Borland или от Microsoft.
Изображение
 Развернуть: PwdGen.cpp
Код: Выделить всё
// PwdGen.cpp
//
// Password generator.
// After generation, copies the result to clipboard.

#ifdef _MSC_VER
#pragma comment(lib,"comctl32.lib")
#endif
#include <windows.h>
#include <commctrl.h>
#include "resource.h"

#define VAL_MIN 3 // Минимальная длина пароля.
#define VAL_MAX 12 // Максимальная длина пароля.
#define VAL_DEFAULT 8 // Длина для генерации по умолчанию.
char* GAppname="Pwd Gen'"; // Заголовок диалогового окна.

BOOL CopyToClipboard(char* str) {
   // Функция копирует текст в Буфер Обмена.
   BOOL bRet=FALSE;
   CloseClipboard();
   if (OpenClipboard(GetActiveWindow())) {
      EmptyClipboard();
      HGLOBAL GlobalMem=GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE,lstrlen(str)+1);
      if (GlobalMem) {
         char* Data=(char*)GlobalLock(GlobalMem);
         lstrcpy(Data,str);
         GlobalUnlock(GlobalMem);
         if (SetClipboardData(CF_TEXT,GlobalMem))
            bRet=1;
      }
      CloseClipboard();
   }
   return bRet;
}

BOOL IsTrue() {
   return (rand()%2)?FALSE:TRUE;
}

char* Generate_Pwd(int nPwdLength, BOOL bStrong)
{
   srand(GetTickCount());

   char* svAbc="a1b2c3d4e5f6g7h8i9j0klmnopqrstuvwxyz";
   static char svBuff[256];
   svBuff[0]=0;
   int n=nPwdLength;

   if (!bStrong)
   {
      n=rand()%nPwdLength;
      if (n<9) n=9;
   }

   UINT val=rand()%36;
   UINT val2=val;
   BOOL bDone=0;
   char svTemp[3];

   for (int i=0;i<n;++i)
   {
      wsprintf(svTemp,"%c",svAbc[val]);
      if (!IsTrue())
         strupr(svTemp);
      lstrcat(svBuff,svTemp);

      if (bDone<7)// Add "_"
      {
         ++bDone;
         if (!IsTrue())
         {
            if (!IsTrue())
               lstrcat(svBuff,"_");
            else if (IsTrue())
               lstrcat(svBuff,"!");
            else
               lstrcat(svBuff,"*");
            ++i;
         }
      }
      val=rand()%36;
      while (val==val2)
         val=rand()%36;
      val2=val;
   }

   CopyToClipboard(svBuff); // Copy to clipboard.

   return svBuff;
}

BOOL OnCommand(HWND hWnd, WPARAM wParam, LPARAM) {
   // Item, control or accelerator identifier.
   int wId=LOWORD(wParam);
   // Notification code.
   //int wNotifyCode=HIWORD(wParam);
   // Handle of control.
   //HWND hwndCtl=(HWND)lParam;

   switch (wId) {
   case IDOK: {
      int n = SendMessage(GetDlgItem(hWnd,IDC_SLIDER1),
         TBM_GETPOS,0,0);
      SetDlgItemText(hWnd,
         IDC_EDIT1,Generate_Pwd(n,TRUE));
   }
   break;

   case IDCANCEL:
   EndDialog(hWnd,IDCANCEL);
   //break;
   } // End wId
   return TRUE;
}

BOOL CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
   char svBuff[32];
   switch (uMsg)
   {
   case WM_INITDIALOG: {
   // Set icon.
   HICON Icon=LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDR_MAINFRAME));
   if (!Icon) Icon=LoadIcon(GetModuleHandle(NULL),IDI_APPLICATION);
   SendMessage(hWnd,WM_SETICON,ICON_BIG,(LPARAM)Icon);
   
   // Set app name.
   SetWindowText(hWnd,GAppname);

   // Set font.
   HFONT hFont=CreateFont(24,0,0,0,FW_NORMAL,0,0,0,GetACP(),0,0,0,0,"Tahoma");
   SendDlgItemMessage(hWnd,IDC_EDIT1,WM_SETFONT,(WPARAM)hFont,0);

   // Set static slider.
   SetDlgItemText(hWnd,IDC_ST_INFO,"Password length");

   wsprintf(svBuff,"%d symbol",VAL_DEFAULT);
   SetDlgItemText(hWnd,IDC_ST_SYMBOL,svBuff);

   // Set slider range min-max.
   SendDlgItemMessage(hWnd,IDC_SLIDER1,
      TBM_SETRANGE,(WPARAM)TRUE,
      (LPARAM)MAKELONG(VAL_MIN,VAL_MAX));

   // Set slider default position.
   SendDlgItemMessage(hWnd,IDC_SLIDER1,
      TBM_SETPOS,(WPARAM)(BOOL)TRUE,
      (LPARAM)(LONG)VAL_DEFAULT);
   }
   return TRUE;

   case WM_COMMAND:
   return OnCommand(hWnd,wParam,lParam);

   case WM_HSCROLL: {
   HWND hwndSlider=GetDlgItem(hWnd,IDC_SLIDER1);
   if (hwndSlider) {
      if ((HWND)lParam==hwndSlider) {
         int i=SendMessage(hwndSlider,TBM_GETPOS,0,0);
         wsprintf(svBuff,"%i symbol",i);
         SetDlgItemText(hWnd,IDC_ST_SYMBOL,svBuff);
      }
   } // End if (hwndSlider)
   }// End case WM_HSCROLL
   return TRUE;

   case WM_CLOSE:
   EndDialog(hWnd,IDCANCEL);
   return TRUE;
   case WM_DESTROY:
   return TRUE;
   } // End uMsg
   return FALSE;
}

/*
* Entry point.
*/
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) {
   InitCommonControls();
   return DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_MAIN_DIALOG),(HWND)NULL,(DLGPROC)DlgProc,(LPARAM)NULL);
}
Вложения
PwdGen.zip
(20.37 Кб) Скачиваний: 111
Последний раз редактировалось luzga 08 июн 2026, 05:03, всего редактировалось 1 раз.
Аватара пользователя
luzga
Мастер Даунгрейда
 
Сообщения: 478
Зарегистрирован: 04 сен 2025, 19:35

Re: Генератор пароля

Сообщение september2489 » 07 июн 2026, 15:28

Как по мне, не хватает кнопки "Копировать в буфер обмена" или по умолчанию встроить этот функционал в кнопку "Generate".
Аватара пользователя
september2489
Мастер Даунгрейда
 
Сообщения: 476
Зарегистрирован: 16 дек 2024, 21:52
Железо: Lenovo ThinkPad T60p, Asus A9Rp

Re: Генератор пароля

Сообщение luzga » 07 июн 2026, 15:49

september2489, см.выше.
Последний раз редактировалось luzga 08 июн 2026, 05:04, всего редактировалось 4 раз(а).
Аватара пользователя
luzga
Мастер Даунгрейда
 
Сообщения: 478
Зарегистрирован: 04 сен 2025, 19:35

Re: Генератор пароля

Сообщение kartoshka » 07 июн 2026, 20:22

я тебя под своим проектом видел :D
kartoshka
Новичок
 
Сообщения: 1
Зарегистрирован: 06 июн 2026, 18:29

Re: Генератор пароля

Сообщение iAPX286 » 07 июн 2026, 20:46

Про генерацию паролей много интересного в мануале от Password Tech написано.
Аватара пользователя
iAPX286
Опытный даунгрейдер
 
Сообщения: 34
Зарегистрирован: 09 фев 2026, 01:59


Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3