ShiftRows permutes the substituted bytes by row. The grid shows exactly where the bytes move.
highlighted = computed this step
Why rows shift
ShiftRows rotates each row left by its row index. That spreads byte positions before the column mixing step.
row r shifts by r
Read the ShiftRows state
The recomputed state is 0xd4bf5d30e0b452aeb84111f11e2798e5.
0xd4bf5d30e0b452aeb84111f11e2798e5
Why this follows SubBytes
The same bytes from SubBytes are still present, but their row positions changed. The transform is a permutation, not an arithmetic mix.
permutation only
Summary
ShiftRows permutes the substituted bytes. NOTE: no-padding; no-side-channel; no-production; never-roll-your-own. Exact byte transforms of ONE AES round over GF(2^8); real AES with 128 runs 10 rounds with a key schedule inside a reviewed mode such as CBC or GCM.