Ho copiato e incollato il tuo codice, ho cambiato solo gli indici in modo da fare esattamente il contrario nella decifratura.
E a dire il vero non mi sono neanche posto il problema di capire la trasformazione, ho solo fatto le operazioni inverse: riempito nell'ordine in cui estrai nella cifratura e estratto nell'ordine in cui riempi.