Новичок
Профиль
Группа: Участник
Сообщений: 15
Регистрация: 3.11.2005
Репутация: нет Всего: нет
|
Народ, помогите плз, надо написать курсовую по этой программе, а без комментариев я фиг в ней сам разберусь, программа делает следующее: выбраный wav фаил разбивает на блоки по 256 байт, каждый блок разбивается пополам на байте соответствующем номеру текущего символа ключа в ASCII, эти подблоки меняются местами, то-есть грубо говоря шифрует данный wav фаил, при декодеровке выполняется та же самая процедура. Заранее огромное спасибо! Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, {Variants, }Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MMSystem, MPlayer, Buttons, ExtCtrls, Spin;
type TForm1 = class(TForm) Panel1: TPanel; SourceFileEdit: TEdit; EncodedFileEdit: TEdit; DecodedFileEdit: TEdit; SpeedButton1: TSpeedButton; SpeedButton2: TSpeedButton; SpeedButton3: TSpeedButton; Button2: TButton; Button3: TButton; Label2: TLabel; KeyEdit: TEdit; Button4: TButton; procedure Button1Click(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure SpeedButton3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private procedure EnCodeFile(OrigFile, DestFile: string); procedure DeCodeFile(OrigFile, DestFile: string); public { Public declarations } end;
const WavHeader: integer = 44; var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
function CreateNewWave(NewFileName: string): Boolean; var DeviceID: Word; Return: LongInt; MciOpen: TMCI_Open_Parms; MciRecord: TMCI_Record_Parms; MciPlay: TMCI_Play_Parms; MciSave: TMCI_SaveParms; MCIResult: LongInt; Flags: Word; TempFileName: array[0..255] of char; begin StrPCopy(TempFileName, NewFileName); MciOpen.lpstrDeviceType := 'waveaudio'; MciOpen.lpstrElementName := ''; Flags := Mci_Open_Element or Mci_Open_Type; MCIResult := MciSendCommand(0, MCI_OPEN, Flags, LongInt(@MciOpen)); DeviceID := MciOpen.wDeviceId; MciRecord.dwTo := 1; Flags := Mci_To or Mci_Wait; MCIResult := MciSendCommand(DeviceID, Mci_Record, Flags, LongInt(@MciRecord)); mciPlay.dwFrom := 0; Flags := Mci_From or Mci_Wait; MciSendCommand(DeviceId, Mci_Play, Flags, LongInt(@MciPlay)); mciSave.lpfileName := TempFilename; Flags := MCI_Save_File or Mci_Wait; MCIResult := MciSendCommand(DeviceID, MCI_Save, Flags, LongInt(@MciSave)); Result := MciSendCommand(DeviceID, Mci_Close, 0, LongInt(nil)) = 0; end;
var FirstFile, ShifrFile, SecondFile: file; size, parts, i, e: integer; Buffer, ShifrBuffer: array of byte;
begin OpenDialog1.Execute; CreateNewWave(ExtractFileDir(OpenDialog1.FileName)+'Shifr.wav'); AssignFile(FirstFile, OpenDialog1.FileName); Reset(FirstFile); AssignFile(ShifrFile, ExtractFileDir(OpenDialog1.FileName)+'Shifr.wav'); rewrite(ShifrFile); Size:=StrToInt(Edit1.Text); Parts:=FileSize(FirstFile) div Size; e:=2*parts; BlockRead(FirstFile, Buffer, Parts); BlockWrite(ShifrFile, Buffer, Parts); For i:=2 to parts+1 do begin if i mod 2 = 0 then BlockRead(FirstFile, Buffer, Parts*i-Parts) else begin ShifrBuffer:=Buffer; BlockRead(FirstFile, Buffer, Parts*i-Parts); BlockWrite(ShifrFile, ShifrBuffer, Parts*i-Parts); BlockWrite(ShifrFile, Buffer, Parts*i-Parts); end end; CloseFile(ShifrFile); CloseFile(Firstfile); {sndPlaySound(ExtractFileDir(OpenDialog1.FileName)+'shifr.wav'), SND_ASYNC); sndPlaySound(nil, SND_ASYNC);} CreateNewWave(ExtractFileDir(OpenDialog1.FileName)+'Second.wav'); AssignFile(ShifrFile, ExtractFileDir(OpenDialog1.FileName)+'Shifr.wav'); Reset(FirstFile); AssignFile(SecondFile, ExtractFileDir(OpenDialog1.FileName)+'second.wav'); Size:=StrToInt(Edit1.Text); Parts:=FileSize(ShifrFile) div Size; e:=2*parts; BlockRead(ShifrFile, Buffer, Parts); BlockWrite(SecondFile, Buffer, Parts); For i:=2 to parts+1 do begin if i mod 2 = 0 then BlockRead(ShifrFile, Buffer, Parts*i-Parts) else begin ShifrBuffer:=Buffer; BlockRead(ShifrFile, Buffer, Parts*i-Parts); BlockWrite(SecondFile, Buffer, Parts*i-Parts); BlockWrite(SecondFile, ShifrBuffer, Parts*i-Parts); end end; CloseFile(ShifrFile); CloseFile(SecondFile); {sndPlaySound(ExtractFileDir(OpenDialog1.FileName)+'Second.wav'), SND_ASYNC); sndPlaySound(nil, SND_ASYNC);} end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin
With OpenDialog1 do If Execute then SourceFileEdit.Text := FileName;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject); begin
With SaveDialog1 do If Execute then EncodedFileEdit.Text := FileName;
end;
procedure TForm1.SpeedButton3Click(Sender: TObject); begin
With SaveDialog1 do If Execute then DecodedFileEdit.Text := FileName;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
If Not FileExists(SourceFileEdit.Text) then begin MessageDlg('Исходный файл не существует или его имя указано с ошибкой', mtError, [mbOK], 0); Exit; end;
If FileExists(EncodedFileEdit.Text) then begin
If MessageDlg('Файл ' + EncodedFileEdit.Text + ' уже существует. Хотите перезаписать его?', mtConfirmation, [mbOK, mbNo], 0) = mrNo then Exit;
end;
EnCodeFile(SourceFileEdit.Text, EncodedFileEdit.Text);
MessageDlg('Файл зашифрован!', mtInformation, [mbOk], 0); end;
procedure TForm1.FormCreate(Sender: TObject); begin EncodedFileEdit.Text := ExtractFilePath(Application.ExeName) + 'Encoded.wav'; DecodedFileEdit.Text := ExtractFilePath(Application.ExeName) + 'Decoded.wav'; OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName); OpenDialog1.Filter := 'Файлы Windows Media|*.Wav'; SaveDialog1.InitialDir := ExtractFilePath(Application.ExeName); SaveDialog1.Filter := 'Файлы Windows Media|*.Wav'; end;
procedure TForm1.EnCodeFile(OrigFile, DestFile: string); var CutPos: integer; Readed: integer; SFile, EnFile: file; Block1, Block2: array of byte; KeyString: string; begin AssignFile(SFile, OrigFile); Reset(SFile, 1);
AssignFile(EnFile, DestFile); Rewrite(EnFile, 1);
SetLength(Block1, WavHeader); //выделяем место под данные Wav файла (Wav - Header)
BlockRead(SFile, Block1[0], Length(Block1), Readed); BlockWrite(EnFile, Block1[0], Length(Block1)); //переписываем без изменений
SetLength(Block1, 255); SetLength(Block2, 255);
KeyString := KeyEdit.Text;
While Not EOf(SFile) do begin BlockRead(SFile, Block1[0], Length(Block1), Readed);
If Readed = Length(Block1) then begin CutPos := ord(KeyString[1]); //выбираем точку разрезания блока KeyString := Copy(KeyString, 2, Length(KeyString) - 1) + KeyString[1]; //бесконечный перебор символов ключа
Move(Block1[CutPos], Block2[0], Length(Block1) - CutPos); //перемешиваем Move(Block1[0], Block2[Length(Block1) - CutPos], CutPos); end else begin //достигнут конец файла
If Readed > 0 then begin SetLength(Block2, Readed); Move(Block1[0], Block2[0], Readed); BlockWrite(EnFile, Block2[0], Length(Block2)); //записываем в результирующий файл последний блок Break; end;
end;
BlockWrite(EnFile, Block2[0], Length(Block2)); //записываем в результирующий файл end;
CloseFile(SFile); CloseFile(EnFile); end;
procedure TForm1.Button3Click(Sender: TObject); begin
If FileExists(DecodedFileEdit.Text) then begin
If MessageDlg('Файл ' + DecodedFileEdit.Text + ' уже существует. Хотите перезаписать его?', mtConfirmation, [mbOK, mbNo], 0) = mrNo then Exit;
end;
DeCodeFile(EncodedFileEdit.Text, DecodedFileEdit.Text);
MessageDlg('Файл дешифрован!', mtInformation, [mbOk], 0); end;
procedure TForm1.DeCodeFile(OrigFile, DestFile: string); var CutPos: integer; Readed: integer; SFile, EnFile: file; Block1, Block2: array of byte; KeyString: string; begin AssignFile(SFile, OrigFile); Reset(SFile, 1);
AssignFile(EnFile, DestFile); Rewrite(EnFile, 1);
SetLength(Block1, WavHeader); //выделяем место под данные Wav файла (Wav - Header)
BlockRead(SFile, Block1[0], Length(Block1), Readed); BlockWrite(EnFile, Block1[0], Length(Block1)); //переписываем без изменений
SetLength(Block1, 255); SetLength(Block2, 255);
KeyString := KeyEdit.Text;
While Not EOf(SFile) do begin BlockRead(SFile, Block1[0], Length(Block1), Readed);
If Readed = Length(Block1) then begin CutPos := ord(KeyString[1]); //выбираем точку разрезания блока KeyString := Copy(KeyString, 2, Length(KeyString) - 1) + KeyString[1]; //бесконечный перебор символов ключа
Move(Block1[Length(Block1) - CutPos], Block2[0], CutPos); //перемешиваем Move(Block1[0], Block2[CutPos], Length(Block1) - CutPos); end else begin //достигнут конец файла
If Readed > 0 then begin SetLength(Block2, Readed); Move(Block1[0], Block2[0], Readed); BlockWrite(EnFile, Block2[0], Length(Block2)); //записываем в результирующий файл последний блок Break; end;
end;
BlockWrite(EnFile, Block2[0], Length(Block2)); //записываем в результирующий файл end;
CloseFile(SFile); CloseFile(EnFile); end;
procedure TForm1.Button4Click(Sender: TObject); begin Close; end;
end.
|
|