MD5/Implementation: Difference between revisions
Content added Content deleted
(→{{header|Scala}}: mark as incorrect) |
|||
Line 1,602: | Line 1,602: | ||
<syntaxhighlight lang="text"> |
<syntaxhighlight lang="text"> |
||
len md5k[] 64 |
len md5k[] 64 |
||
len md5s[] 64. |
|||
func md5init . . |
func md5init . . |
||
⚫ | |||
s[] = [ 7 12 17 22 5 9 14 20 4 11 16 23 6 10 15 21 ] |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
. |
|||
for i = 0 to 3 |
|||
⚫ | |||
⚫ | |||
⚫ | |||
. |
|||
⚫ | |||
⚫ | |||
. |
. |
||
call md5init |
call md5init |
||
# |
# |
||
func md5 inp$ . s$ . |
func md5 inp$ . s$ . |
||
subr addinp |
subr addinp |
||
if inp4 = 1 |
if inp4 = 1 |
||
inp[] &= 0 |
inp[] &= 0 |
||
. |
. |
||
inp[len inp[]] += b * inp4 |
inp[len inp[]] += b * inp4 |
||
inp4 *= 0x100 |
inp4 *= 0x100 |
||
if inp4 = 0x100000000 |
if inp4 = 0x100000000 |
||
inp4 = 1 |
inp4 = 1 |
||
. |
. |
||
. |
. |
||
s[] = [ 7 12 17 22 7 12 17 22 7 12 17 22 7 12 17 22 5 9 14 20 5 9 14 20 5 9 14 20 5 9 14 20 4 11 16 23 4 11 16 23 4 11 16 23 4 11 16 23 6 10 15 21 6 10 15 21 6 10 15 21 6 10 15 21 ] |
|||
inp[] = [ ] |
|||
inp[] = [ ] |
|||
inp4 = 1 |
|||
for i = 1 to len inp$ |
|||
b = strcode substr inp$ i 1 |
|||
⚫ | |||
call addinp |
|||
. |
|||
. |
|||
⚫ | |||
⚫ | |||
⚫ | |||
while len inp[] mod 16 <> 14 or inp4 <> 1 |
while len inp[] mod 16 <> 14 or inp4 <> 1 |
||
⚫ | |||
b = 0 |
|||
⚫ | |||
. |
|||
⚫ | |||
h = len inp$ * 8 |
h = len inp$ * 8 |
||
for i range0 4 |
|||
for i = 1 to 4 |
|||
⚫ | |||
⚫ | |||
call addinp |
|||
⚫ | |||
. |
|||
. |
|||
inp[] &= 0 |
|||
# |
|||
a0 = 0x67452301 |
|||
b0 = 0xefcdab89 |
|||
c0 = 0x98badcfe |
|||
d0 = 0x10325476 |
|||
for chunk = 1 step 16 to len inp[] - 15 |
|||
for chunk = 1 step 16 to len inp[] - 15 |
|||
a = a0 ; b = b0 ; c = c0 ; d = d0 |
|||
for i = 1 to 64 |
|||
if i <= 16 |
|||
h1 = bitand b c |
|||
h2 = bitand bitnot b d |
|||
f = bitor h1 h2 |
|||
g = i - 1 |
|||
elif i <= 32 |
|||
h1 = bitand d b |
|||
h2 = bitand bitnot d c |
|||
f = bitor h1 h2 |
|||
g = (5 * i - 4) mod 16 |
|||
elif i <= 48 |
|||
h1 = bitxor b c |
|||
f = bitxor h1 d |
|||
⚫ | |||
⚫ | |||
else |
|||
h1 = bitor b bitnot d |
|||
f = bitxor c h1 |
|||
g = (7 * i - 7) mod 16 |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
h1 = bitshift f s[i] |
|||
h2 = bitshift f (s[i] - 32) |
|||
⚫ | |||
. |
. |
||
a0 += a ; b0 += b ; c0 += c ; d0 += d |
|||
. |
|||
s$ = "" |
|||
for a in [ a0 b0 c0 d0 ] |
|||
for i = 1 to 4 |
|||
b = a mod 256 |
|||
a = a div 256 |
|||
for h in [ b div 16 b mod 16 ] |
|||
. |
|||
h += 48 |
|||
⚫ | |||
. |
|||
h += 39 |
|||
. |
|||
s$ &= strchar h |
|||
for i range0 4 |
|||
. |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
. |
|||
⚫ | |||
. |
. |
||
. |
|||
. |
|||
. |
. |
||
repeat |
repeat |
||
s$ = input |
s$ = input |
||
until error = 1 |
until error = 1 |
||
call md5 s$ h$ |
call md5 s$ h$ |
||
print h$ |
print h$ |
||
. |
. |
||
input_data |
input_data |