Ajuda com código [Criptografia], obrigado!

O seguite: estou tentando criar um código para converter uma palavra com a criptografia de Cesar: ex: eu estou pegando cada letra da palavra e aumentando 3 posições, com a letra a ficaria d, com a letra d ficaria g, e assim por diante.

Só que está dando o seguinte erro:
Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 100

Pensei em armazenar os valores convertido em ASCII dps ao imprimir converter novamente para CHAR

Favor sugestões…

public class Criptografia_Cifra {
	public static String palavra_convertida = "";			
	
	public static void Converter (String param){
		String palavra = param;			

		for (int a = 0; a <= palavra.length()-1; a++){	
				
			palavra_convertida += palavra.charAt('a'+3);
			
		}
	}

	public static String Mensagem() {
		return "A palavra: "+palavra_convertida+".";
	}
}

Estou quase lá:

public class Criptografia_Cifra {
	public static int codigo_ASCII;	
	public static String codigo_criptografado = "";	
	
	public static void Converter (String param){
		String palavra = param;	
		char b;		

		for (int a = 0; a <= palavra.length()-1; a++){	
			
			codigo_ASCII = palavra.charAt(a)+3;
			b = (char)codigo_ASCII;

			codigo_criptografado += Character.toString(b);			
		}
	}

	public static String Mensagem() {
		return "A palavra: "+codigo_criptografado+".";
	}
}

Olá.

Por que você não usa um elemento da interface Map? Veja…

static Map<Character, Character> mapaCaracteres = new HashMap<Character, Character>();

Depois faz algo assim:

static void preencherMapa(){
		char letra = 'A';
		while (letra <= 'Z'){
			mapaCaracteres.put(letra, aumentaLetraEmTresUnidades(letra));
			letra++;
		}
	}
	
	static char aumentaLetraEmTresUnidades(char letra){
		if (letra + 3 <= 'Z'){
			return (char) (letra + 3);
		}
		
		if (letra + 2 <= 'Z'){
			return 'A';
		}
		
		if (letra + 1 <= 'Z'){
			return 'B';
		}
		
		return 'C';
	}

pronto, agora é só criar seu método de criptografia. Você já sabe que, por exemplo, a letra R corresponde à letra U. Basta colocar

mapaCaracteres.get('R')

que ele devolverá a letra U. =)

existem boas solucoes que implementam algoritimos conhecidos e seguros de criptografia

www.jasypt.org/
http://www.bouncycastle.org/java.html