Estou tentando criar um programa de criptografia usando RSA e preciso converter texto simples em um long
. Obviamente, o texto simples precisaria conter mais do que apenas números, então usar .x Long.parseLong()
não é uma solução. Encontrei isso e ele explica como converter um char
array em .x long
dessa maneira, mas não tenho certeza de como convertê-lo de volta para um char
array (ou String
). O código que obtive do site acima está aqui:
public long charArrayToLong(char[] bi){
long len = bi.length;
long sum = 0;
long tmp, max = len - 1;
for (int i = 0; i < len; ++i) {
tmp = bi[i] - '0';
sum += tmp * Math.pow(2, max--);
return sum;
}
Este código funciona para traduzir uma char
matriz em um long sem depender apenas de valores numéricos na char
matriz, mas também preciso de um método para convertê-lo de volta.
Especificamente o que estou procurando é isto: preciso converter cada um char
em String
um número, com base em seu valor ASCII, multiplicar esse número com base em uma potência de sua localização no String
, somar esses números para obter uma long
variável de texto simples e reverter a operação para traduzi-la para o outro lado.
Minha entrada esperada é um String
em texto simples (por exemplo, "A raposa marrom rápida salta sobre o cachorro preguiçoso"). Minha saída esperada é um "long" com valores para cada caractere embutido String
no número.
Preciso fazer isso porque preciso exponenciar um número, não um String
, com a fórmula c = m ^ e % n
. Como m
a mensagem está em texto simples, preciso convertê-la em um número para poder elevá-la à potência de e
, a chave pública.
Para converter quatro
char
valores em um longo -- o que funciona para caracteres arbitrários (não apenas ASCII) -- você pode fazerDepois de fazer a descriptografia correta -- para que você tenha uma sequência válida de caracteres em seu longo -- você pode reverter isso com
...embora você provavelmente queira converter os longs em sequências de bytes e depois convertê-las em strings em seu próprio estilo.
(Fazer isso corretamente passaria por mais fases: converter a string inteira em bytes UTF-8, preenchê-los com o número apropriado de valores, fazer cálculos, converter o resultado matemático em bytes, convertê-los em Base64 para a saída e, então, executar todos esses passos ao contrário na outra extremidade.)
Mudança de bits!