Как изменить THash.Hash во время выполнения

Как я могу изменить алгоритм THash.Hash по умолчанию с SHA-1 по умолчанию на MD5?

Не работает следующее:

var
  StringHash: THash;
begin
  StringHash.Create(nil);
  StringHash.Hash := 'MD5';
end;

Редактировать:

Да, вы правы: прошу прощения, что не упомянул тот факт, что THash — это класс нового TurboPower LockBox 3.

Еще раз приношу свои извинения за это упущение!

Во всяком случае, Шон уже дал ответ, который я искал.

Спасибо вам всем


person Fabio Vitale    schedule 13.12.2011    source источник
comment
Что такое ТХэш? Я не могу найти никакой ссылки.   -  person TLama    schedule 13.12.2011
comment
T выглядит так, как будто это просто тип класса, который на самом деле является хэшем, поскольку Delphi использует T для своего соглашения об именах. Вы можете перейти к THash и посмотреть, от чего наследуется его настоящий класс? У Indy есть класс для этого? вот хорошая ссылка для использования stackoverflow.com/questions/58621/   -  person MethodMan    schedule 13.12.2011
comment
Конечно, это не работает. Это приведет к сбою вашей программы, потому что вы обращаетесь к методам и свойствам несуществующего объекта. Но это не имеет ничего общего с хешированием. Это справедливо для всех объектов Delphi. Это то, о чем вы на самом деле спрашиваете? Если нет, опубликуйте соответствующий код, показывающий, как вы успешно используете хэш, и тогда мы сможем показать вам, что нужно изменить, чтобы использовать другой.   -  person Rob Kennedy    schedule 13.12.2011


Ответы (2)


Предполагая, что вы имеете в виду компонент THash TurboPower Lockbox, вы можете выбрать алгоритм хеширования во время выполнения:

function FindHashOfBananaBananaBanana: TBytes;
var
  StringHash: THash;
  Lib: TCrypographicLibrary;
begin
StringHash := THash.Create( nil);
Lib := TCrypographicLibrary( nil);
try
  StringHash.CryptoLibrary := Lib;
  StringHash.HashId := SHA512_ProgId; // Find constants for other algorithms
                                      //  in unit uTPLb_Constants.
  StringHash.HashAnsiString('Banana banana banana');
  SetLength( result, StringHash.HashOutputValue.Size);
  StringHash.HashOutputValue.Read( result[0], StringHash.HashOutputValue.Size);
  StringHash.Burn
finally
  StringHash.Free;
  Lib.Free
  end
end;
person Sean B. Durkin    schedule 14.12.2011
comment
Какова цель метода StringHash.Burn? - person Fabio Vitale; 16.12.2011

Код вашего примера недействителен. Тип переменной — THASH, имя переменной — STRINGHASH. Когда вы создаете экземпляр класса, формат обычно следующий:

var
  StringHash:THash;
begin
  StringHash := THash.Create();
  try
    DoSomethingWithStringHash;
  finally
    StringHash.Free()
  end
end;

Исправьте свой пример и вернитесь с более подробной информацией.

person Darian Miller    schedule 13.12.2011