Snippet #14 ~ JAVA : Crypter et décrypter une chaine de caractère

Salut  !! Tout le monde s’en fout mais c’était mon anniversaire hier !!

Et à cette occasion, c’est moi qui vous fais cadeaux de ce petit snippet permettant de crypter ou de décrypter des String Java et ce en utilisant une clé de cryptage ainsi que les outils du package Cypher.

(en passant, je trouve inquiétant que ce package précis porte le nom du traître de Matrix mais bon…)

Crypter le mot de passe :


public String encrypt(String password,String key){
try
{
Key clef = new SecretKeySpec(key.getBytes("ISO-8859-2"),"Blowfish");
Cipher cipher=Cipher.getInstance("Blowfish");
cipher.init(Cipher.ENCRYPT_MODE,clef);
return new String(cipher.doFinal(password.getBytes()));
}
catch (Exception e)
{
return null;
}
}

 

Décrypter le mot de passe :


public String decrypt(String password,String key){
try
{
Key clef = new SecretKeySpec(key.getBytes("ISO-8859-2"),"Blowfish");
Cipher cipher=Cipher.getInstance("Blowfish");
cipher.init(Cipher.DECRYPT_MODE,clef);
return new String(cipher.doFinal(password.getBytes()));
}
catch (Exception e)
{
System.out.println(e);
return null;
}
}

 

Si vous ne souhaitez pas utiliser la crypto Cypher, vous pouvez utiliser un code plus simple :

Crypter

    public String encrypt(String password){
        String crypte=””;
        for (int i=0; i<password.length();i++)  {
            int c=password.charAt(i)^48; 
            crypte=crypte+(char)c;
        }
        return crypte;
    }

 

Décrypter

    public String decrypt(String password){
        String aCrypter=””;
        for (int i=0; i<password.length();i++)  {
            int c=password.charAt(i)^48; 
            aCrypter=aCrypter+(char)c;
        }
        return aCrypter;
    }

20 réactions au sujet de « Snippet #14 ~ JAVA : Crypter et décrypter une chaine de caractère »

  1. AkaiKen Réponse

    Comment tu spoiles Matrix, rholala.

    Joyeux annif’, alors !

    Tiens, je ne sais plus si j’en avais déjà parlé, mais je cherche un logiciel pour rassembler, conserver et surtout ranger tous ces snippets, compatible Windows et Linux, tu aurais ça dans ta besace ?

    • Idleman Auteur ArticleRéponse

      En même temps ceux qui n’ont toujours pas vu matrix 1 depuis sa sortie il y a 13 ans ne méritent pas vraiment de vivre… :p

      Merci, j’ai commandé une trottinette cette année, je m’adapte à la crise, je vend ce gouffre à pognon que constitue ma clio 1 :p

      Non je n’ai jamais rien développé dans ce sens mais c’est une idée :p, sinon je crois qu’il y à pas mal de sites à droite et à gauche qui servent de base de donnée de snippets. Pour ce qui est de programmes lourds je n’en ai jamais entendu parler 🙂

      • AkaiKen Réponse

        Je connais des gens qui n’ont pas vu Star Wars. Le premier (le vrai, quoi).

        Je ne pensais pas forcément “as-tu développé une boîte à snippets” dans ma phrase =D mais oui, c’est une idée ^^
        Et je n’aime pas trop l’idée de confier mes snippets à des sites tiers, je préfère avoir le contrôle ^^’ Pour Windows, si ça t’intéresse, j’ai Codex, très bon, introuvable parce que plus sur le site de l’auteur, et je cherchais un équivalent Linux. (ou alors je le Wine ? hmmm)

        • Idleman Auteur ArticleRéponse

          Techniquement, c’est le 4 le premier 🙂 et donc le vrai ( on est fan jusqu’au bout ou on ne l’est pas du tout 😀 )

          Et personnellement je refuse de parler à ce type de population, les références de ce films s’inscrivent aujourd’hui dans les normes de la langue française pour moi, c’est quelque chose qui devrait être enseigné dès la primaire :p.

          Je veux bien que tu m’envoie codex par curiosité, si un jour j’ai une minute je ferais un équivalent java (et donc portable a peu près partout) et je te préviendrais 🙂

          Si c’est un petit prog, ça devrais passer sur wine 🙂

          • AkaiKen

            Ah mais je parlais évidemment du “4”. Pour qui me prends-tu donc =D ?

            Je t’envoie Codex (mais si tu en fais un prog Java, rends-le joli ^^ j’ai vu trop de softs utiles tellement moches que ça ne donne pas envie de les utiliser…).

  2. Anthony Réponse

    Bonjour,

    en copiant collant ce code j’obtient de manière un peu aléatoire l’exception suivante :

    logic.TechnicalException: Erreur de decryptage
    at util.cryptage.MyBlowfish.deChiffrer(MyBlowfish.java:40)
    Caused by: javax.crypto.BadPaddingException: Given final block not properly padded
    at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
    at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
    at com.sun.crypto.provider.BlowfishCipher.engineDoFinal(DashoA13*..)
    at javax.crypto.Cipher.doFinal(DashoA13*..)
    at util.cryptage.MyBlowfish.deChiffrer(MyBlowfish.java:37)
    ... 24 more

    Ca vous dit quelque chose?

    Merci

    • Idleman Auteur ArticleRéponse

      Salut, laquelle des deux proposition de l’article a tu copié/collé ?

      Ta chaine crtyptée contient elle des caractères spéciaux ou une longueur indécente?

      As tu modifié le code? La TechnicalException “Erreur de décryptage” ressemble fort a un gestion des exception personnalisée, regarde de ce coté si tu ne peux pas avoir plus de précision sur l’erreur.

      • Anthony Réponse

        Merci pour ta réponse rapide.
        TechnicalException est effectivement une exception perso qui se contente d’afficher la stacktrace.

        J’ai utilisé la première méthode celle utilisant “Blowfish”.

        D’après quelque essai, c’est la conversion byte[] -> String et String -> byte[] qui pose problème.

        Voici ma méthode de teste (cette fois ci en laissant le traitement des exceptions telle qui l’est:

        @Test
        	public void testChiffrage() {
        
        		for (int i = 0; i < 2000; i++) {
        			final String messageACrypter = generateStringAleatoire();
        			final String messageCrypte = MyBlowfish.encrypt(messageACrypter, "clealacon");
        			if (messageCrypte.equals(messageACrypter)) {
        				fail("Le message crypté est identique au message d'origine");
        			}
        			final String messageDecrypter = MyBlowfish.decrypt(messageCrypte, "clealacon");
        			if (!messageDecrypter.equals(messageACrypter)) {
        				fail("  (i=" + i + ")Le message décrypté est different du message d'origine");
        			}
        		}
        	}
        
        	/**
        	 * Genere une chaine de taille et de donnee aleatoire
        	 * 
        	 * @return
        	 */
        	private static String generateStringAleatoire() {
        		final int MAXNumberOFLetter = 60;
        		final int length = (int) Math.floor(Math.random() * MAXNumberOFLetter);
        
        		final String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 ";
        		final StringBuffer pass = new StringBuffer(length);
        		for (int x = 0; x < length; x++) {
        			final int i = (int) Math.floor(Math.random() * (chars.length() - 1));
        			pass.append(chars.charAt(i));
        		}
        		return pass.toString();
        	}
        

        javax.crypto.BadPaddingException: Given final block not properly padded
        (i=1)Le message décrypté est different du message d’origine
        messageACrypter=v0jDBthWfWuO1uK4hTQKThy1dLTA
        messageDecrypter=null

        Par contre si je transmet / reutilise le “byte[]” plutot que de le transformer en String cela fonctionne.

  3. BERNADIN Réponse

    Bonjour les amis
    laissez moi toutes vos préoccupations concernant vos problèmes techniques de montage d’antenne ou de fréquences
    studioback@yahoo.fr et si vous êtes antennistes comme moi echangeons d’idées merci

  4. mathe Réponse

    Bonjour,
    J’ai utilisé vos méthodes de cryptage cependant j’ai une erreure qui revient, a propos de la taille des blocs en effet il faut aparemment que ce soit un multiple de 8 enfin je ne comprends pas trop si vous pouviez m’en dire plus, voici l’exeption lors du décryptage ( le cryptage se passe normalement ) :

    Input length must be multiple of 8 when decrypting with padded cipher

  5. radidine massada Réponse

    salut je sis débutant dans les rat pourais je connaitre comment crypter mon server rat en fud

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.