0 / 0 / 0
Регистрация: 27.10.2008
Сообщений: 9
1

Алгоритм кодирования SHA-1

27.10.2008, 13:38. Показов 4909. Ответов 8
Метки нет (Все метки)

Кто работал с алгоритмом кодировки Sha-1 и имеет какие-то исходники?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2008, 13:38
Ответы с готовыми решениями:

Алгоритм кодирования RLE
Какова длина последовательности, после кодирования которой методом RLE получится следующее?...

Алгоритм SHA-1
Здравствуйте! Нужно написать код алгоритма шифрования SHA-1. Есть вот этот псевдокод, но я не могу...

Алгоритм sha - 512
Пользователь вводит hash К примеру:...

как работает алгоритм sha-1
как работает алгоритм sha-1 можно ли объяснять код #include "stdio.h" #include "stdlib.h"...

8
Администратор
82455 / 51027 / 244
Регистрация: 10.04.2006
Сообщений: 13,330
27.10.2008, 13:42 2
На делфях:
Код
unit SHA1;

interface
uses
  Sysutils, Tools;

type
  TSHA1Digest= array[0..19] of byte;
  TSHA1Context= record
    Hash: array[0..4] of DWord;
    Hi, Lo: integer;
    Buffer: array[0..63] of byte;
    Index: integer;
  end;

function SHA1SelfTest: boolean;
procedure SHA1Init(var Context: TSHA1Context);
procedure SHA1Update(var Context: TSHA1Context; Buffer: pointer; Len: integer);
procedure SHA1Final(var Context: TSHA1Context; var Digest: TSHA1Digest);

//******************************************************************************
implementation
{$R-}

function SHA1SelfTest: boolean;
const
  s: string= 'abc';
  OutDigest: TSHA1Digest=
    ($a9,$99,$3e,$36,$47,$06,$81,$6a,$ba,$3e,$25,$71,$78,$50,$c2,$6c,$9c,$d0,$d8,$9d);
var
  Context: TSHA1Context;
  Digest: TSHA1Digest;
begin
  SHA1Init(Context);
  SHA1Update(Context,@s[1],length(s));
  SHA1Final(Context,Digest);
  if CompareMem(@Digest,@OutDigest,Sizeof(Digest)) then
    Result:= true
  else
    Result:= false;
end;

//******************************************************************************
function F1(x, y, z: DWord): DWord;
begin
  Result:= z xor (x and (y xor z));
end;
function F2(x, y, z: DWord): DWord;
begin
  Result:= x xor y xor z;
end;
function F3(x, y, z: DWord): DWord;
begin
  Result:= (x and y) or (z and (x or y));
end;

//******************************************************************************
function RB(A: DWord): DWord;
begin
  Result:= (A shr 24) or ((A shr 8) and $FF00) or ((A shl 8) and $FF0000) or (A shl 24);
end;

procedure SHA1Compress(var Data: TSHA1Context);
var
  A, B, C, D, E, T: DWord;
  W: array[0..79] of DWord;
  i: integer;
begin
  Move(Data.Buffer,W,Sizeof(Data.Buffer));
  for i:= 0 to 15 do
    W[i]:= RB(W[i]);
  for i:= 16 to 79 do
    W[i]:= LRot32(W[i-3] xor W[i-8] xor W[i-14] xor W[i-16],1);
  A:= Data.Hash[0]; B:= Data.Hash[1]; C:= Data.Hash[2]; D:= Data.Hash[3]; E:= Data.Hash[4];
  for i:= 0 to 19 do
  begin
    T:= LRot32(A,5) + F1(B,C,D) + E + W[i] + $5A827999;
    E:= D; D:= C; C:= LRot32(B,30); B:= A; A:= T;
  end;
  for i:= 20 to 39 do
  begin
    T:= LRot32(A,5) + F2(B,C,D) + E + W[i] + $6ED9EBA1;
    E:= D; D:= C; C:= LRot32(B,30); B:= A; A:= T;
  end;
  for i:= 40 to 59 do
  begin
    T:= LRot32(A,5) + F3(B,C,D) + E + W[i] + $8F1BBCDC;
    E:= D; D:= C; C:= LRot32(B,30); B:= A; A:= T;
  end;
  for i:= 60 to 79 do
  begin
    T:= LRot32(A,5) + F2(B,C,D) + E + W[i] + $CA62C1D6;
    E:= D; D:= C; C:= LRot32(B,30); B:= A; A:= T;
  end;
  Data.Hash[0]:= Data.Hash[0] + A;
  Data.Hash[1]:= Data.Hash[1] + B;
  Data.Hash[2]:= Data.Hash[2] + C;
  Data.Hash[3]:= Data.Hash[3] + D;
  Data.Hash[4]:= Data.Hash[4] + E;
  FillChar(W,Sizeof(W),0);
  FillChar(Data.Buffer,Sizeof(Data.Buffer),0);
end;

//******************************************************************************
procedure SHA1Init(var Context: TSHA1Context);
begin
  Context.Hi:= 0; Context.Lo:= 0;
  Context.Index:= 0;
  FillChar(Context.Buffer,Sizeof(Context.Buffer),0);
  Context.Hash[0]:= $67452301;
  Context.Hash[1]:= $EFCDAB89;
  Context.Hash[2]:= $98BADCFE;
  Context.Hash[3]:= $10325476;
  Context.Hash[4]:= $C3D2E1F0;
end;

//******************************************************************************
procedure SHA1UpdateLen(var Context: TSHA1Context; Len: integer);
var
  i, k: integer;
begin
  for k:= 0 to 7 do
  begin
    i:= Context.Lo;
    Inc(Context.Lo,Len);
    if Context.Lo< i then
      Inc(Context.Hi);
  end;
end;

//******************************************************************************
procedure SHA1Update(var Context: TSHA1Context; Buffer: pointer; Len: integer);
type
  PByte= ^Byte;
begin
  SHA1UpdateLen(Context,Len);
  while Len> 0 do
  begin
    Context.Buffer[Context.Index]:= PByte(Buffer)^;
    Inc(PByte(Buffer));
    Inc(Context.Index);
    Dec(Len);
    if Context.Index= 64 then
    begin
      Context.Index:= 0;
      SHA1Compress(Context);
    end;
  end;
end;

//******************************************************************************
procedure SHA1Final(var Context: TSHA1Context; var Digest: TSHA1Digest);
type
  PDWord= ^DWord;
begin
  Context.Buffer[Context.Index]:= $80;
  if Context.Index>= 56 then
    SHA1Compress(Context);
  PDWord(@Context.Buffer[56])^:= RB(Context.Hi);
  PDWord(@Context.Buffer[60])^:= RB(Context.Lo);
  SHA1Compress(Context);
  Context.Hash[0]:= RB(Context.Hash[0]);
  Context.Hash[1]:= RB(Context.Hash[1]);
  Context.Hash[2]:= RB(Context.Hash[2]);
  Context.Hash[3]:= RB(Context.Hash[3]);
  Context.Hash[4]:= RB(Context.Hash[4]);
  Move(Context.Hash,Digest,Sizeof(Digest));
  FillChar(Context,Sizeof(Context),0);
end;


end.
Код
unit Tools;

interface
uses
  Sysutils;

type
{$IFDEF VER120}
  dword= longword;
{$ELSE}
  dword= longint;
{$ENDIF}

function LRot16(X: word; c: integer): word; assembler;
function RRot16(X: word; c: integer): word; assembler;
function LRot32(X: dword; c: integer): dword; assembler;
function RRot32(X: dword; c: integer): dword; assembler;
procedure XorBlock(I1, I2, O1: PByteArray; Len: integer);
procedure IncBlock(P: PByteArray; Len: integer);

implementation

function LRot16(X: word; c: integer): word; assembler;
asm
  mov ecx,&c
  mov ax,&X
  rol ax,cl
  mov &Result,ax
end;

function RRot16(X: word; c: integer): word; assembler;
asm
  mov ecx,&c
  mov ax,&X
  ror ax,cl
  mov &Result,ax
end;

function LRot32(X: dword; c: integer): dword; register; assembler;
asm
  mov ecx, edx
  rol eax, cl
end;

function RRot32(X: dword; c: integer): dword; register; assembler;
asm
  mov ecx, edx
  ror eax, cl
end;

procedure XorBlock(I1, I2, O1: PByteArray; Len: integer);
var
  i: integer;
begin
  for i:= 0 to Len-1 do
    O1[i]:= I1[i] xor I2[i];
end;

procedure IncBlock(P: PByteArray; Len: integer);
begin
  Inc(P[Len-1]);
  if (P[Len-1]= 0) and (Len> 1) then
    IncBlock(P,Len-1);
end;

end.
1
0 / 0 / 0
Регистрация: 27.10.2008
Сообщений: 9
09.12.2008, 18:52  [ТС] 3
mik-a-el, имеешь имеющийся пример сжатия данных этим алгоритмом

Добавлено через 43 секунды
mik-a-el, ????
0
Администратор
82455 / 51027 / 244
Регистрация: 10.04.2006
Сообщений: 13,330
09.12.2008, 19:07 4
Цитата Сообщение от dominator Посмотреть сообщение
mik-a-el, имеешь имеющийся пример сжатия данных этим алгоритмом
А во втором посте что?
0
0 / 0 / 0
Регистрация: 27.10.2008
Сообщений: 9
10.12.2008, 21:22  [ТС] 5
mik-a-el, я имею в виду реализацию на бумаге

Добавлено через 1 минуту 24 секунды
mik-a-el, как закодировать этим алгоритмом например: Хороший день
0
Почетный модератор
11285 / 4253 / 434
Регистрация: 12.06.2008
Сообщений: 12,270
10.12.2008, 21:33 6
Цитата Сообщение от dominator
как закодировать этим алгоритмом например: Хороший день
Наверное, ты имел ввиду, как узнать SHA-1 хеш от строки... на сколько я понял, как пользоваться этим модулем:
Код
Uses SHA1;
Var SHA : TSHA1Context;
    SHARes : TSHA1Digest;
    S : String;
Begin
  S := 'Хороший день';
  SHA1Init(SHA);
  SHA1Update(SHA,@S[1],Length(S));
  SHA1Final(SHA,SHARes);
// Теперь в SHARes содержиться хеш... переведём его в более понятный вид
  S := '';
  For I := 0 to 19 do S := S+IntToHex(SHARes[I],2);
  Label1.Caption := S;
End;
Должно получиться 0b3d033662477fa57d056278911e4b8bc1b1ec9a
0
0 / 0 / 0
Регистрация: 27.10.2008
Сообщений: 9
11.12.2008, 01:39  [ТС] 7
как хороший день перевести с помощью алгоритма SHA1 не программно а практически с помощью ручки на бумаге??

Добавлено через 1 минуту 25 секунд
Humanoid, как хороший день перевести с помощью алгоритма SHA1 не программно а практически с помощью ручки на бумаге??
0
0 / 0 / 0
Регистрация: 27.10.2008
Сообщений: 9
13.01.2009, 19:49  [ТС] 8
mik-a-el, ты имеешь описание этого алгоритма? мне нужно этот алгоритм на курсовой сделать.

Добавлено через 1 минуту 51 секунду
Humanoid, ты имеешь описание этого алгоритма? мне нужно этот алгоритм на курсовой сделать.
0
0 / 0 / 0
Регистрация: 27.10.2008
Сообщений: 9
18.01.2009, 00:26  [ТС] 9
mik-a-el, ты имеешь описание этого алгоритма?

Добавлено через 1 минуту 31 секунду
dominator, помоги пожалуста если не трудно!!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2009, 00:26
Помогаю со студенческими работами здесь

Алгоритм кодирования LZ77
привет мальчики помогите пожалуйста мне дописать 3 строчки в функции def makeLZ77. препод сказал...

Алгоритм кодирования RSA
Сам процесс поиска ключей в кодировании сделал, но смущает другое - какой тип данных использовать,...

Алгоритм кодирования последовательности
Здравствуйте, есть ли такой алгоритм кодирования последовательности a_1, a_2, a_3, ..., a_n (a_i ...

Общий алгоритм алфавитного кодирования
Добрый день! Может, кто-то когда-то делал шифровку такого алгоритма. Теорема к этому алгоритму...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru