XOR sort an array
Python 3, 75 73 bytes
lambda k,x:x.sort(key=lambda s:[ord(x)^ord(y)for x,y in zip(s,k*len(s))])
This sorts the list x in-place.
Thanks to @mercator for golfing off 2 bytes!
Try it online!
Alternate version, 62 bytes
This takes input as byte strings, which may not be allowed.
lambda k,x:x.sort(key=lambda s:[*map(int.__xor__,s,k*len(s))])
Try it online!
Jelly, 9 7 bytes
⁹ṁO^OµÞ
Thanks to @EriktheOutgolfer for a suggestion that helped saving 2 bytes!
Try it online!
How it works
⁹ṁO^OµÞ Dyadic link.
Left argument: A (string array). Right argument: k (key string).
µ Combine the code to the left into a chain.
Begin a new, monadic chain with argument A.
Þ Sort A, using the chain to the left as key.
Since this chain is monadic, the key chain will be called monadically,
once for each string s in A.
⁹ Set the return value to the right argument of the link (k).
ṁ Mold k like s, i.e., repeat its characters as many times as necessary
to match the length of s.
O Ordinal; cast characters in the resulting string to their code points.
O Do the same for the chain's argument (s).
^ Perform bitwise XOR.
Haskell, 77 bytes
import Data.Bits
import Data.List
t=fromEnum
sortOn.zipWith((.t).xor.t).cycle
Too many imports.
Try it online!