Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
MD5 (Message-Digest algorithm 5 ) – žinutės santraukos algoritmas , plačiai naudojama kriptografijos maišos funkcija su 128 bitų (16 baitų) maišos reikšme.
Pradinis tekstas suskirstomas į N blokų po 512 bitų (64 baitus).
Jei paskutiniame
M
N
{\displaystyle M_{N}}
bloke trūksta informacijos iki 512 bitų, bloko gale pridedamas 1 ir tiek 0, kad būtų užpildyta likusi bloko dalis.
Pradinis kontrolinis blokas
M
D
0
{\displaystyle MD_{0}}
yra užpildytas.
A: 01 23 45 67
B: 89 ab cd ef
C: fe dc ba 98
D: 76 54 32 10
Naudojamos keturios pagalbinės funkcijos kurios operuoja su trimis 32-bitų žodžiais, ir grąžina vieną 32-bitų žodį.
F
(
X
,
Y
,
Z
)
=
X
Y
o
r
n
o
t
X
Z
{\displaystyle F(X,Y,Z)\ =\ XY\ or\ not\ X\ Z}
G
(
X
,
Y
,
Z
)
=
X
Z
o
r
Y
n
o
t
Z
{\displaystyle G(X,Y,Z)\ =\ XZ\ or\ Y\ not\ Z}
H
(
X
,
Y
,
Z
)
=
X
x
o
r
Y
x
o
r
Z
{\displaystyle H(X,Y,Z)\ =\ X\ xor\ Y\ xor\ Z}
I
(
X
,
Y
,
Z
)
=
Y
x
o
r
(
X
a
n
d
n
o
t
Z
)
{\displaystyle I(X,Y,Z)\ =\ Y\ xor\ (X\ and\ not\ Z)}
Su kiekvienu bloku
M
q
{\displaystyle M_{q}}
atliekamas kontrolinio bloko
M
D
q
{\displaystyle MD_{q}}
skaičiavimas, naudojantis ankstesniu kontroliniu bloku
M
D
q
−
1
{\displaystyle MD_{q-1}}
. Yra atliekami tokie veiksmai:
Kopijuojamas blokas q į X
X
[
j
]
=
M
[
q
∗
16
+
j
]
{\displaystyle X[j]=M[q*16+j]}
.
Išsaugomos A,B,C,D reikšmės
A
A
=
A
{\displaystyle AA=A}
B
B
=
B
{\displaystyle BB=B}
C
C
=
C
{\displaystyle CC=C}
D
D
=
D
{\displaystyle DD=D}
Atliekami skaičiavimai:
A
=
B
+
(
(
A
+
F
(
B
,
C
,
D
)
+
X
[
k
]
+
T
[
i
]
)
<<<
s
)
{\displaystyle A\ =\ B\ +\ ((A\ +\ F(B,C,D)\ +\ X[k]\ +\ T[i])\ <<<\ s)}
A
=
B
+
(
(
A
+
G
(
B
,
C
,
D
)
+
X
[
k
]
+
T
[
i
]
)
<<<
s
)
{\displaystyle A\ =\ B\ +\ ((A\ +\ G(B,C,D)\ +\ X[k]\ +\ T[i])\ <<<\ s)}
A
=
B
+
(
(
A
+
H
(
B
,
C
,
D
)
+
X
[
k
]
+
T
[
i
]
)
<<<
s
)
{\displaystyle A\ =\ B\ +\ ((A\ +\ H(B,C,D)\ +\ X[k]\ +\ T[i])\ <<<\ s)}
A
=
B
+
(
(
A
+
I
(
B
,
C
,
D
)
+
X
[
k
]
+
T
[
i
]
)
<<<
s
)
{\displaystyle A\ =\ B\ +\ ((A\ +\ I(B,C,D)\ +\ X[k]\ +\ T[i])\ <<<\ s)}
Sudedame:
A
=
A
+
A
A
{\displaystyle A\ =\ A\ +\ AA}
B
=
B
+
B
B
{\displaystyle B\ =\ B\ +\ BB}
C
=
C
+
C
C
{\displaystyle C\ =\ C\ +\ CC}
D
=
D
+
D
D
{\displaystyle D\ =\ D\ +\ DD}
Atlikus šiuos veiksmus visiems blokams gautos A,B,C,D reikšmės yra maišos funkcijos reikšmė.