| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Требуется помощь programmera! |
| Автор: lesha 6.1.2004, 04:57 |
| Попал в руки исходник программы но сам в ней не могу разобраться Собственно сам код: program key; {$APPTYPE CONSOLE} uses Windows, Classes, SysUtils, KbCrypt, common, base64; const SKeyFile = 'server.key'; var S, PWD, KeyFile: string; My: TCryptLib; sKey: TKey; F: TEXT; Memory: TMemoryStream; MK, AK, nDays, MaxComps: DWORD; begin KeyFile := 'key.txt'; MaxComps := StrToIntDef(ParamStr(1), 1); nDays := StrToIntDef(ParamStr(2), 365); Assign(F, KeyFile); Reset(F); Readln(F, S); if S = '' then Exit; Writeln('Using file with key: '+KeyFile); My := TCryptLib.Create(nil); My.Password := #0#23#128#0#98#108#63#125#201#135#1#72; My.Compression := LZ; AK := 61235349; MK := 325634; My.AddKey := AK; My.MultKey := MK; Hex2Str(S); sKey := Str2Key(S); Write( ' Password:' ); Readln(PWD); if PWD = '' then Exit; if PWD <> (' '+DateToStr(Date)+'.' ) then raise Exception.Create('Bad password.' ); Writeln(' Info: ' ); S := sKey.key; S := My.DecryptStr(Str2Hex(S)); CharToOem(Pointer(S), Pointer(S)); Writeln(S); S := sKey.uid; S := My.DecryptStr(Str2Hex(S)); CharToOem(Pointer(S), Pointer(S)); Writeln(S); S := sKey.info; S := My.DecryptStr(Str2Hex(S)); CharToOem(Pointer(S), Pointer(S)); Writeln(Replace(S, ']', ']'#13#10' ' ); S := sKey.date; Writeln(S); Writeln(' ' ); Writeln(' MaxComps: ', MaxComps); Writeln('Expiration Date: ' , DateToStr(Now+nDays) ); Writeln('_____________________________________________________' ); Write('Generate key file? : ' ); Readln(PWD); if not SameText(PWD, 'Y' ) then begin Writeln('Canceled.' ); Exit; end; Memory := TMemoryStream.Create(); try WriteCert(Memory, sKey, MaxComps, Now-1, Now+nDays); My.EncryptMemory(Memory); Memory.Position := 0; Memory.SaveToFile(SKeyFile+'.'+IntToStr(MaxComps)); Base64Encode_stream(Memory); Memory.SaveToFile(SKeyFile+'.'+IntToStr(MaxComps)+'.base64' ); FreeAndNil(Memory); finally Memory.Free; end; System.Writeln('OK.' ); end. Кто разобрался, расскажите. Очень надо |
| Автор: Fedor 6.1.2004, 05:34 |
| А что именно тебе нужно узнать? А то какой-то безпредметный разговор получится... |
| Автор: <Spawn> 6.1.2004, 06:48 | ||
Вроде разъяснил |
| Автор: lesha 7.1.2004, 17:32 |
| <Spawn> Очень хорошо, что помог разобраться. Чему очень благодарен. Вопрос в догонку именно по этой части //Если пользователь хочет создать новый файл, то.. Readln(PWD); if not SameText(PWD, 'Y' ) then begin Writeln('Canceled.' ); Exit; end; // ... создаем его Memory := TMemoryStream.Create(); try WriteCert(Memory, sKey, MaxComps, Now-1, Now+nDays); My.EncryptMemory(Memory); Memory.Position := 0; Memory.SaveToFile(SKeyFile+'.'+IntToStr(MaxComps)); Base64Encode_stream(Memory); Memory.SaveToFile(SKeyFile+'.'+IntToStr(MaxComps)+'.base64' ); В следующих строчках: Readln(PWD); if not SameText(PWD, 'Y' ) then //если я ввожу другие значения то выход. begin Writeln('Canceled.' ); Exit; end; Видел такое, что в поле пароля вводили кучу всего и генерировался файл совсем другой. Если к примеру я при вводе пароля ставлю Y то получаю два файла server.key.1 server.key.1.base64 а видел такое: сгенерировались файлы server.key.30 server.key.30.base64 Если это возможно то как? |
| Автор: lesha 7.1.2004, 17:32 |
| Morpheus Прочитай выше, что меня интересует, а то времени в обрез. |