Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
zmei89
32 / 7 / 1
Регистрация: 10.09.2010
Сообщений: 835
1

Хеширование паролей. Генераторы случайных чисел

20.02.2012, 14:48. Просмотров 1667. Ответов 1
Метки нет (Все метки)

1. Изучить алгоритмы хеширования паролей.
2. Изучить известные алгоритмы работы генераторов случайных чисел.

3 Проанализировать выходную последовательность, выдаваемую генератором при различных параметрах.
Дополнительные требования к лабораторной работе:
1. Паролем может быть ЛЮБАЯ последовательность символов (русских и английских, цифр, знаков препинания и т.д.). Схема хеширования пароля также берется из лабораторной работы №1
2. Текст программы оформляется прилично (удобочитаемо, с описанием ВСЕХ функций, переменных и критических мест).
3. В процессе работы программа ОБЯЗАТЕЛЬНО выдает информацию о состоянии процесса генерации.
4. Интерфейс программы может быть произвольным, но удобным и понятным (разрешается использование библиотек VCL)


Вот что нашел в инернете,может кто подскажет ссылки или есть готовые работы
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;

type
TForm1 = class(TForm)
SGTable: TStringGrid;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Label1: TLabel;

Procedure Add_Key(S : String);

procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
{

const m=19; // РАЗМЕР ХЭШ ТАБЛИЦЫ
const c=7; // КОНТСАНТА, ИСПОЛЬЗУЕМАЯ ПРИ РАЗРЕШЕНИЕ КОЛИЗИЙ
const d=9; // КОНСТАНТА, ИСПОЛЬЗУЕМАЯ ПРИ РАЗРЕШЕНИЕ КОЛИЗИЙ

var
Key : array[0..m] of Integer; // ХЭШ ТАБЛИЦА
ColizCount : Integer; // КОЛ-ВО КОЛИЗИЙ

// ПРЕДСТАВЛЕНИЕ СТРОКИ ВВИДЕ ОДНОГО ЧИСЛА (ЦЕЛОЕ)
Function StrInInt(s: string): Integer;
var
i : integer; //
n : integer; //
Return : Integer; //
begin
Return:=0; //
for i:=1 to Length(s) do
Return:=Return*2+Ord(s[i]);

StrinInt:=Return;
end;

// ХЭШ ФУНКЦИЯ
Function Hash(k : integer): Integer;
Begin
k:=k mod m+1;

Hash:=k;
end;

// ОТЛАДКА КОЛИЗИЙ
Function Col_solution(k : Integer): Integer;
var
i : integer; // СЧЕТЧИК КОЛИЗИЙ
k0 : integer; // СТАРТОВОЕ ЗНАЧЕНИЕ ХЭШ ФУНКЦИИ
begin
i:=1;
k0:=k;
Repeat
i:=i+1;
k:=(Hash(k)+c*i+d*i*i) mod (m+1);
//ПОКА НЕ НАШЛИ СВОБОДНУЮ СТРОКУ ИЛИ ЗНАЧЕНИЕ к НЕ РАВНО СТАРТОВОМУ ЗНАЧЕНИЮ,
// ЧТО ОЗНАЧАЕТ ТАБЛИЦА ПЕРЕПОЛНЕНА
until (Key[k]=0) or (K0=k);
if k0=k then k:=-1;
ColizCount:=i; // ИТОГОВОЕ КОЛИЧЕСТВО КОЛИЗИЙ

Col_Solution:=k;
end;

// ДОБАВИТЬ КЛЮЧ В ТАБЛИЦУ
Procedure TForm1.Add_Key(S : String);
var
i : Integer; //
k : integer; //
Begin

k:=Hash(0);
if key[k]<>0 then k:=Col_solution(Hash(k));
if k=-1 then showMessage('Таблица переполнина')
else
Begin
key[k]:=StrInInt(s);
SgTable.Cells[1,k]:=s+' - '+IntToStr(StrInInt(Edit1.Text));;
SgTable.Cells[2,k]:=IntToStr(k);
SgTable.Cells[3,k]:=IntToStr(ColizCount);
End;
End;

procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Add_Key(Edit1.Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
var i : integer; //
begin
SGTable.RowCount:=m+1;
sgTable.ColCount:=4;
SgTable.Cells[0,0]:='Номер Строки';
SgTable.Cells[1,0]:='Ключ';
SgTable.Cells[2,0]:='Хэш значение';
SgTable.Cells[3,0]:='Кол-во колизий';

for i:=0 to m do
begin
sgtable.Cells[0,i+1]:=IntToStr(i+1);
key[i]:=0;
end;
end;

end.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2012, 14:48
Ответы с готовыми решениями:

Среди N случайных чисел в диапазоне от -1 до 10 определите количество чисел, делящихся на 3.
6. Среди N случайных чисел в диапазоне от -1 до 10 определите количество чисел,...

Записать 60 случайных чисел в типизированный файл,переписать по 6 чисел в строке в текстовый файл
ЗАДАНИЕ: записать 60 случайных чисел в типизированный файл,переписать по 6 ...

Генератор случайных чисел
Всем здравствуйте. Помогите &quot;пожалуйста&quot;, задача моя такова... С помощью...

Генератор случайных чисел
Все работает, только не так как надо) В коде указано промежуток чисел от &quot;А&quot;...

Генератор случайных чисел
Помогите кто знает, нужно составить программу в делфи, которая будет...

1
Microo10
24 / 19 / 4
Регистрация: 18.08.2011
Сообщений: 394
20.02.2012, 14:51 2
Лучший ответ Сообщение было отмечено zmei89 как решение

Решение

Цитата Сообщение от zmei89 Посмотреть сообщение
1. Изучить алгоритмы хеширования паролей.
2. Изучить известные алгоритмы работы генераторов случайных чисел.

3 Проанализировать выходную последовательность, выдаваемую генератором при различных параметрах.
Дополнительные требования к лабораторной работе:
1. Паролем может быть ЛЮБАЯ последовательность символов (русских и английских, цифр, знаков препинания и т.д.). Схема хеширования пароля также берется из лабораторной работы №1
2. Текст программы оформляется прилично (удобочитаемо, с описанием ВСЕХ функций, переменных и критических мест).
3. В процессе работы программа ОБЯЗАТЕЛЬНО выдает информацию о состоянии процесса генерации.
4. Интерфейс программы может быть произвольным, но удобным и понятным (разрешается использование библиотек VCL)

Вот что нашел в инернете,может кто подскажет ссылки или есть готовые работы
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
 
type
  TForm1 = class(TForm)
    SGTable: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Label1: TLabel;
 
    Procedure Add_Key(S : String);
 
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
{
 
const m=19; //  РАЗМЕР ХЭШ ТАБЛИЦЫ
const c=7;  //  КОНТСАНТА, ИСПОЛЬЗУЕМАЯ ПРИ РАЗРЕШЕНИЕ КОЛИЗИЙ
const d=9;  //  КОНСТАНТА, ИСПОЛЬЗУЕМАЯ ПРИ РАЗРЕШЕНИЕ КОЛИЗИЙ
 
var
        Key : array[0..m] of Integer; //  ХЭШ ТАБЛИЦА
  ColizCount : Integer; // КОЛ-ВО КОЛИЗИЙ
 
// ПРЕДСТАВЛЕНИЕ СТРОКИ ВВИДЕ ОДНОГО ЧИСЛА (ЦЕЛОЕ)
Function StrInInt(s: string): Integer;
var
        i : integer; //
        n : integer; //
        Return : Integer; //
begin
    Return:=0;  //
    for i:=1 to Length(s) do
                Return:=Return*2+Ord(s[i]);
 
                StrinInt:=Return;
end;
 
// ХЭШ ФУНКЦИЯ
Function Hash(k : integer): Integer;
Begin
    k:=k mod m+1;
 
          Hash:=k;
end;
 
// ОТЛАДКА КОЛИЗИЙ
Function Col_solution(k : Integer): Integer;
var
    i : integer; // СЧЕТЧИК КОЛИЗИЙ
    k0 : integer; // СТАРТОВОЕ ЗНАЧЕНИЕ ХЭШ ФУНКЦИИ
begin
  i:=1;
  k0:=k;
    Repeat
        i:=i+1;
        k:=(Hash(k)+c*i+d*i*i) mod (m+1);
    //ПОКА НЕ НАШЛИ СВОБОДНУЮ СТРОКУ ИЛИ ЗНАЧЕНИЕ к НЕ РАВНО СТАРТОВОМУ ЗНАЧЕНИЮ,
    // ЧТО ОЗНАЧАЕТ ТАБЛИЦА ПЕРЕПОЛНЕНА
    until (Key[k]=0) or (K0=k);
if k0=k then k:=-1;
ColizCount:=i; // ИТОГОВОЕ КОЛИЧЕСТВО КОЛИЗИЙ
 
        Col_Solution:=k;
end;
 
//  ДОБАВИТЬ КЛЮЧ В ТАБЛИЦУ
Procedure TForm1.Add_Key(S : String);
var
    i : Integer;  //
    k : integer;  //
Begin
 
          k:=Hash(0);
          if key[k]<>0 then  k:=Col_solution(Hash(k));
          if k=-1 then showMessage('Таблица переполнина')
          else
            Begin
              key[k]:=StrInInt(s);
              SgTable.Cells[1,k]:=s+' - '+IntToStr(StrInInt(Edit1.Text));;
              SgTable.Cells[2,k]:=IntToStr(k);
              SgTable.Cells[3,k]:=IntToStr(ColizCount);
            End;
End;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Add_Key(Edit1.Text);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var i : integer; //
begin
SGTable.RowCount:=m+1;
sgTable.ColCount:=4;
SgTable.Cells[0,0]:='Номер Строки';
SgTable.Cells[1,0]:='Ключ';
SgTable.Cells[2,0]:='Хэш значение';
SgTable.Cells[3,0]:='Кол-во колизий';
 
for i:=0 to m do
    begin
        sgtable.Cells[0,i+1]:=IntToStr(i+1);
        key[i]:=0;
    end;
end;
end.
Используйте код Delphi.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2012, 14:51

Матрица случайных чисел
Необходимо заполнить stringgrid случайными числами так чтобы сумма всех...

Генерация случайных чисел
Парни, подскажите как сделать генератор случайных чисел. Мы вводим диапазон...

Генератор случайных чисел
Здравствуйте,я только только начал изучать делфи и сейчас делаю программу с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru