J, 1818 17 bytes
(a.{~(#"0+&96)i.27){a. Explanation:
i.27 a. - the wholelist alphabet of integers 0 - 26 ( +&96) { - selectadds items96 fromto the above list ( starting offset of 'a') - indices of the#"0 alphabet to be selected - copies i.27the right argument left argument times - list of integers{~ 0 - 26 ( +&96) - adds 96select toitems thefrom abovea list (starting offset ofarguments 'a'reversed) a. #"0 - copies the right argument- leftthe argumentwhole timesalphabet #"0 +&96 is a hook, which means that at first +96 is applied to the list i.27, resulting in a list 96, 97, 98... 122, then #"0 is applied to this result. So it is evaluated as ((i.27)#"0(96+i.27)){a: