6
votes

César simple Cipher en Java

Hey je fais un chiffre de César simple en Java à l'aide de la formule [x-> (x + shift-1) mod 127 + 1] Je souhaite que mon texte crypté conserve les caractères ASCII, à l'exception des caractères de contrôle ( c'est-à-dire de 32-127). Comment puis-je éviter les caractères de contrôle de 0 à 31 appliquer dans le texte crypté. Merci.


1 commentaires

Devoirs? Si oui, veuillez l'étiqueter comme tel.


7 Réponses :


8
votes

Que diriez-vous de quelque chose comme ceci:

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);
}


0 commentaires

1
votes

mapper vos caractères de [32....127] sur [0..95], faire un MOD 95 + 1 et cartographier le résultat de [32....127].


0 commentaires

1
votes

Le texte en chiffrement habituellement est de base64 codé, base16 (heex) fonctionne également bien. BASE64 est utilisé le plus souvent pour le texte en chiffrement car il prend moins d'espace que hexagonal, HEX est le plus couramment utilisé pour les digests de messages. Dans la bibliothèque Java.UTIL.PREFS.BASE64, vous trouverez BYTEARRAYTOBASE64 () et BASE64TOBYTEARRAYRAY ().

Sur une note latérale, vous ne devez jamais écrire votre propre algorithme de cryptage pour des raisons de sécurité, vous devriez utiliser un chiffre à bloc ou un chiffrement de flux. J'espère que c'est pour le plaisir!


0 commentaires

1
votes

là! Y a-t-il un moyen de considérer toute la gamme de caractères? Par exemple, "á", "à ©", "ö", "à ±" et ne considère pas "" (le [espace])? (Par exemple, ma chaîne est "Hello World", et le résultat standard est "khoor # zruog"; Je veux effacer que "#", le résultat serait "khoorzruog")

Je suis sûr que ma réponse est dans cette pièce de code: xxx

... Mais j'ai essayé certaines choses, et que je n'ai pas fonctionné: s donc, je vais attendre vos réponses : D See You!


0 commentaires

1
votes

Pourquoi ne pas essayer

pour (int i = 0; i


0 commentaires

1
votes

Copy Coller ceci dans NetBeans avec nom "Caesar": xxx

}


0 commentaires

0
votes
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();

    }

}

1 commentaires

Pour toute aide, contactez-moi.