Oye Estoy haciendo un cifrado César simple en Java usando la fórmula [x-> (x + shift-1) mod 127 + 1] Quiero que mi texto cifrado tenga los caracteres ASCII excepto los caracteres de control (es decir, de 32 a 127). ¿Cómo puedo evitar que los caracteres de control 0-31 se apliquen en el texto cifrado? Gracias.Cifrado César simple en java
Respuesta
¿Qué tal algo como esto:
public String applyCaesar(String text, int shift)
{
char[] chars = text.toCharArray();
for (int i=0; i < text.length(); i++)
{
char c = chars[i];
if (c >= 32 && c <= 127)
{
// Change base to make life easier, and use an
// int explicitly to avoid worrying... cast later
int x = c - 32;
x = (x + shift) % 96;
if (x < 0)
x += 96; //java modulo can lead to negative values!
chars[i] = (char) (x + 32);
}
}
return new String(chars);
}
cierto que esto trata a 127 como un personaje no-control, que no lo es ... es posible que desee modificarlo para mantener el rango como [32, 126].
Asigne sus caracteres desde [32..127] a [0..95], haga un mod 95+1
y asocie el resultado de nuevo a [32..127].
-1 ¿Y los personajes de control? –
Normalmente el texto de cifrado está codificado en base64, base16 (hexadecimal) también funciona bien. Base64 se usa con más frecuencia para el texto de cifrado porque ocupa menos espacio que el hexadecimal, el hexadecimal se usa con mayor frecuencia para resúmenes de mensajes. En la biblioteca java.util.prefs.Base64 encontrará byteArrayToBase64() y base64ToByteArray().
Como nota adicional, NUNCA debe escribir su propio algoritmo de encriptación por razones de seguridad, debe usar un cifrado de bloque o un cifrado de flujo. ¡Espero que esto sea por diversión!
allí! ¿Hay alguna manera de considerar toda la gama de personajes? Por ejemplo, "á", "é", "ö", "ñ", y no considerar "" (el [Espacio])? (Por ejemplo, mi String es "Hello World", y el resultado estándar es "Khoor # Zruog"; quiero borrar ese "#", por lo que el resultado sería "KhoorZruog")
Estoy seguro de que respuesta está en este pedazo de código:
if (c >= 32 && c <= 127)
{
// Change base to make life easier, and use an
// int explicitly to avoid worrying... cast later
int x = c - 32;
x = (x + shift) % 96;
chars[i] = (char) (x + 32);
}
... Pero he intentado algunas cosas, y la no funcionó: S por lo tanto, voy a esperar por sus respuestas: D Nos vemos!
Por qué no pruebas
for(int i = 0; i < length; i++) { char c = chars[i] if(Character.isLetter(c)) { int x = c - 32; x = (x + shift) % 96; chars[i] = (char) (x+32); } }
copiar y pegar esto en NetBeans con el nombre de "César":
//package caesar;
import java.io.*;
public class caesar {
int offset=3;
public String encrypt(String s) throws IOException
{
StringBuilder sb=new StringBuilder();
for(int i=0;i<s.length();i++)
{
char t=s.charAt(i);
if(t>='A' && t<='Z')
{
int t1=t-'A'+offset;
t1=t1%26;
sb.append((char)(t1+'A'));
}
else if(t>='a' && t<='z')
{
int t1=t-'a'+offset;
t1=t1%26;
sb.append((char)(t1+'a'));
}
}
return sb.toString();
}
public String decrypt(String s) throws IOException
{
StringBuilder sb=new StringBuilder();
for(int i=0;i<s.length();i++)
{
char t=s.charAt(i);
if(t>='A' && t<='Z')
{
int t1=t-'A'-offset;
if(t1<0)t1=26+t1;
sb.append((char)(t1+'A'));
}
else if(t>='a' && t<='z')
{
int t1=t-'a'-offset;
if(t1<0)t1=26+t1;
sb.append((char)(t1+'a'));
}
}
return sb.toString();
}
public static void main(String[] args) {
try
{
System.out.println("Caesar encrypion technique");
BufferedReader b;
String oriTxt,encTxt,decTxt;
System.out.println("Enter string to encrypt:");
b=new BufferedReader(new InputStreamReader(System.in));
oriTxt=b.readLine();
caesar c=new caesar();
encTxt=c.encrypt(oriTxt);
System.out.println("Encrypted text :"+encTxt);
decTxt=c.decrypt(encTxt);
System.out.println("Derypted text :"+decTxt);
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
}
import java.util.Scanner;
//caeser
public class Major_Assingment {
public static final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZhh";
public static String encrypt(String plainText,int shiftKey)
{
plainText = plainText.toUpperCase();
String cipherText= " ";
for(int i=0; i<plainText.length(); i++)
{
int charPosition = ALPHABET.indexOf(plainText.charAt(i));
int keyVal = (shiftKey + charPosition)% 26 ;
char replaceVal = ALPHABET.charAt(keyVal);
cipherText += replaceVal;
}
return cipherText;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the string for Encryption:");
String message = new String();
message = sc.next();
System.out.println(encrypt(message,3));
sc.close();
}
}
para cualquier ayuda póngase en contacto conmigo. –
- 1. cifrado César en C++
- 2. Cifrado César en C#
- 3. Función de cifrado César en Python
- 4. Cifrado simple de Java
- 5. Programación de un programa de cifrado (Texto sin formato-> Cifrado César-> ASCII)?
- 6. Implementación simple de cifrado en C
- 7. Cifrado RSA en Java
- 8. Cifrado de URL en Java
- 9. Cifrado con BlowFish en Java
- 10. Cifrado de transposición de fila simple
- 11. Cifrado de cadena simple en .NET y Javascript
- 12. Biblioteca de cifrado bidireccional Java
- 13. Cifrado RSA: Java a PHP
- 14. Puerto RSA código Java cifrado en C#
- 15. Uso de HTTPS en Java sin cifrado
- 16. cifrado Triple DES y descifrado en Java
- 17. ¿Cómo haré un simple cifrado y descifrado de archivos?
- 18. Métodos de cifrado de archivos Php. ¿Existe algo simple?
- 19. ¿Algún tutorial sobre cifrado de clave pública en java?
- 20. Túnel SSH simple en Java
- 21. cifrado RSA: Diferencia entre Java y Android
- 22. Uso del cifrado de openssl con Java
- 23. Java 7 keytool Cifrado de curva elíptica
- 24. forzando 4 dígitos año en el formato simple de Java
- 25. Servidor Java HTTPS simple
- 26. Java: Cliente SOAP simple
- 27. ¿Cifrado y cifrado son diferentes?
- 28. Convertir cadenas en claves de cifrado y viceversa java
- 29. Asesorar sobre el rendimiento del cifrado de archivos en Java
- 30. Cifrado RSA en Java: ¿Problemas con la plataforma cruzada?
tarea? Si es así, por favor marqúelo como tal. –