JavaScript (Node.js), 60 bytes
Expects (permutation_string)(string)
.
p=>s=>(B=Buffer)(s).map(c=>(B(p)[q=c&32,c-q-65]||c)&95|q)+''
JavaScript (ES6), 42 bytes
Assuming using lists of ASCII codes is acceptable:
p=>s=>s.map(c=>(p[q=c&32,c-q-65]||c)&95|q)