Я перерыл сеть, пытаясь найти пример функции, как хешировать текст с помощью Sha1 и DCPcrypt.
У меня есть пример ниже. Кажется, всплывает все время. Но он каждый раз возвращает китайские иероглифы. Помогите, пожалуйста, исправить функцию.
function TForm1.EncryptThis(aString : string) : string;
var
Cipher: TDCP_cast256;
KeyStr: string;
begin
KeyStr:= '';
Cipher:= TDCP_cast256.Create(Self);
Cipher.InitStr(KeyStr,TDCP_sha1);
result := Cipher.EncryptString(aString);
Cipher.Burn;
Cipher.Free;
end;
ОБНОВЛЕНИЕ: Используя приведенные ниже ссылки и информацию, я создал эти функции. Но, как я уже сказал, это не имеет большого смысла для меня. Так что извините за невежество.
Однако код не работает. Его вывод: 3F3F3F3F3F3F3F3F3F3F00000000000000000000
, тогда как он должен быть 40bd001563085fc35165329ea1ff5c5ecbdbbeef
, так как я сказал программе иметь 123
.
Пожалуйста помоги.
function CalcDigest(text: string): string;
var
x: TDCP_hash;
begin
x := TDCP_sha1.Create(nil);
try
x.Init;
x.UpdateStr(text);
SetLength(Result, x.GetHashSize div 8);
x.Final(Result[1]);
finally
x.Free;
end;
end;
function String2Hex(const Buffer: Ansistring): string;
begin
SetLength(result, 2*Length(Buffer));
BinToHex(@Buffer[1], PWideChar(@result[1]), Length(Buffer));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
memo2.Lines.Add(String2Hex(CalcDigest(memo1.Lines.Strings[0])));
end;
2 ответа
Судя по этому, сделать это можно так:
function CalcDigest(text: string): string;
var
x: TDCP_hash;
begin
x := TDCP_sha1.Create(nil);
try
x.Init;
x.UpdateStr(text);
SetLength(Result, x.GetHashSize div 8);
x.Final(Result[1]);
finally
x.Free;
end;
end;
Вы можете закодировать хэш перед печатью, потому что вывод двоичный. См., например, этот вопрос.
123
먋䙖쉮瘥歾싑䄿
123
, я хочу иметь возможность хешировать в delphi и показывать тот же результат в поле заметки... sha1-online.com... По сути, 2 должны совпадать.
Я не очень хорошо знаком с DCPCrypt. Вы также можете использовать другие библиотеки.
1) Indy - обычно входит в Delphi
function SHA1Text(const s: string): string;
begin
with TIdHashSHA1.Create do
try
Result:=LowerCase(HashStringAsHex(s));
finally
Free;
end;
end;
2) Библиотеки Вольфганга Эрхардта (самые быстрые, насколько я знаю) от http://www.wolfgang-ehrhardt.de/crchash_en.html
function SHA1Text(const s: string): string;
var
Context: THashContext;
SHA1Digest: TSHA1Digest;
begin
SHA1Init(Context);
SHA1Update(Context, pChar(s), length(s));
SHA1Final(Context, SHA1Digest);
Result:=HexStr(@SHA1Digest, SizeOf(SHA1Digest));
end;
ПРИМЕЧАНИЕ: это из Delphi 7. Вам нужно будет обновить его, если вы используете Unicode Delphi.
Похожие вопросы
Связанные вопросы
Новые вопросы
delphi
Delphi - это язык для быстрой разработки собственных приложений для Windows, macOS, Linux, iOS и Android с использованием Object Pascal. Название относится к языку Delphi, а также к его библиотекам, компилятору и IDE, которые используются для помощи в редактировании и отладке проектов Delphi.