Is align the right environment here?

I'd avoid long textual set descriptions. Everybody understands “hom”, in my opinion. The symbol at the left of \longmapsto is understood to be a variable in the set above it and similarly for the symbol at the right of \longmapsfrom.

I propose two different alignments, take your pick.

\documentclass[11pt, a4paper, english]{article}
\usepackage[main=english, ngerman]{babel}
\usepackage{amsmath, amssymb, mathtools, amsthm,array}
\usepackage{stmaryrd}
\usepackage{geometry}

\DeclareMathOperator{\GL}{GL}

\begin{document}

\begin{equation*}
\renewcommand{\arraystretch}{1.2}
\setlength{\arraycolsep}{0pt}
\begin{array}{ c >{{}}c<{{}} c }
\hom(G,\GL(K^n)) & \overset{1:1}\longleftrightarrow  & \hom(G,\GL_n(K)) \\
\rho             & \longmapsto                       & \mathbf{c}_{B,B}(?)\circ \rho \\
\mathbf{c}_{B,B}(?)^{-1} \circ \rho' & \longmapsfrom &  \rho'
\end{array}
\end{equation*}

\begin{equation*}
\renewcommand{\arraystretch}{1.2}
\setlength{\arraycolsep}{0pt}
\begin{array}{ r >{{}}c<{{}} l }
\hom(G,\GL(K^n)) & \overset{1:1}\longleftrightarrow  & \hom(G,\GL_n(K)) \\
\rho             & \longmapsto                       & \mathbf{c}_{B,B}(?)\circ \rho \\
\mathbf{c}_{B,B}(?)^{-1} \circ \rho' & \longmapsfrom &  \rho'
\end{array}
\end{equation*}

\end{document}

enter image description here

The (local) redefinition of \arraystretch is meant to spread out the rows of the array (it's the same as what amsmath does for cases, for instance).

Why \setlength{\arraycolsep}{0pt}? We want to rely on the automatic spacing added by TeX in math formulas, instead of padding the columns. So the middle column is set in a special way by means of

>{{}}c<{{}}

which means that array will see {}\longmapsto{} or similar in the middle column (see the documentation of the array package for the syntax). Since array typesets each cell in math mode, the two empty groups provide “phantom atoms” around the relation symbol and TeX will duly insert the standard spacing between these atoms and the relation symbol.

Why equation*? Because there is a single object in the display, namely the array. It's best to reserve align for displays with multiple objects in different rows, hence with \\ at the “outer level”.