Cifrado en Java

public class Main {

private static String alfabeto = "abcdefghijklmnñopqrstuvxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ .,:áéíóúÁÉÍÓÚ";

public static void main(String[] args) {
int numero=113;
int[] clave = new int[]{3,numero*6+1};
String a = codificar(clave, "hola");
System.out.println(a);
System.out.println(codificar(claveDescifrado(clave), a));

}

private static int[] claveDescifrado(int[] clave){
int[] descif = new int[2];
descif[0]=inverso(clave[0], alfabeto.length());
descif[1]=-inverso(clave[0], alfabeto.length())*clave[1];
if(descif[1]<0){
descif[1]=alfabeto.length()+descif[1];
}
if(descif[0]<0){
descif[0]=alfabeto.length()+descif[0];
}
return descif;
}

private static String codificar(int[] clave, String mensaje){
int[] secuencia = pasarTextoNumero(mensaje);
String mensajeCodificado = "";
for (int i = 0; i < secuencia.length; i++) {
mensajeCodificado+=alfabeto.charAt(operacion(secuencia[i],clave));
}
return mensajeCodificado;
}

private static int operacion(int numero, int[] clave){
return (clave[0]*numero+clave[1])%alfabeto.length();
}

private static int[] pasarTextoNumero(String mensaje){
int[] secuencia = new int[mensaje.length()];//array con la longitud del mensaje

for (int i = 0; i < secuencia.length; i++) {
char letra = mensaje.charAt(i);
int valor = valorLetra(letra);
secuencia[i]=valor;
}
return secuencia;
}

private static int valorLetra(char letra){
for (int j = 0; j < alfabeto.length(); j++) {
if(letra==alfabeto.charAt(j)){
return j;
}
}
return -1;
}

    public static int inverso(int a,int m)
    {
        int c1=1,c2=-1*(m/a);//coeficiente de a y b respectivamente
        int t1=0,t2=1;//coeficientes penultima corrida
        int r=m%a;//residuo, asignamos 1 como condicion de entrada
        int x=a,y=r,c;
        while(r!=0){
       c= x/y;//cociente
       r= x%y;//residuo
       //guardamos valores temporales de los coeficientes
       //multiplicamos los coeficiente por -1*cociente de la division
       c1*=-1*c;
       c2*=-1*c;
       //sumamos la corrida anterior
       c1+=t1;
       c2+=t2;
       //actualizamos corrida anterior
       t1=-1*(c1-t1)/c;
       t2=-1*(c2-t2)/c;
       x=y;
       y=r;
        }
        if(x==1)//residuo anterior es 1 , son primos relativos y el inverso existe
            return t2;
        else
            return -1;
    }

}