Registriert seit: 6. Dez 2005
999 Beiträge
|
Re: MD5 HASH = 32 HEXZeichen convertto Dezimalzahl
21. Jan 2010, 14:08
Zitat von boller78:
Wie komme ich vom HASH-Wert: 15819a364dbe86b956083bbd19992857f
auf die Dezimalzahl: 28586721999694642100505878794595370367
Als erstes mußt Du aus "999" im Hexwert "99" machen, sonst kommt nix vernünfiges raus. Ansonsten ist's halt eine normale Division eines Base256-Vektors (sprich array of byte) durch 10. Hier Dein korrigiertes Beispiel:
Delphi-Quellcode:
program t_b10;
{$ifdef WIN32}
{$apptype console}
{$endif}
{---------------------------------------------------------------------------}
function base256_to_baseB( var a: array of byte; B: byte): string;
{-bigendian base 256 number to base B string, a is destroyed}
const
cmap: array[0..61] of char = ' 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var
i,k: integer;
w: word;
d: byte;
s: string;
begin
s := ' ';
{k is index of MSB of a}
k := low(a);
repeat
{One repeat iteration calculates a := a div B; d := a mod B}
{initialize "carry"}
w := 0;
for i:=k to high(a) do begin
{loop invariant: 0 <= w < B}
w := (w shl 8) or a[i];
if w>=B then begin
d := w div B;
w := w mod B;
end
else d:=0;
a[i] := d;
end;
{set d to remainder, w is still < B!}
d := byte(w);
{add base R digit to result if d is not out of range}
if d<sizeof(cmap) then s := cmap[d]+s
else s := ' ?'+s;
{if MSB(a) is zero increment lower bound}
if a[k]=0 then inc(k);
until k>high(a);
base256_to_baseB := s;
end;
const
HashBin : array[0..15] of byte = ($15,$81,$9a,$36,$4d,$be,$86,$b9,$56,$08,$3b,$bd,$19,$92,$85,$7f);
var
s: string;
tmp: array[0..15] of byte;
i: integer;
begin
{Copy Hash into tmp byte buffer}
for i:=0 to 15 do tmp[i] := HashBin[i];
s := base256_to_baseB(tmp, 10);
writeln(' Hash as decimal number: ', s);
end.
Ausgabe:
Code:
Borland Pascal Version 7.0 Copyright (c) 1983,92 Borland International
Hash as decimal number: 28586721999694642100505878794595370367
|
|
Zitat
|