IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Traduction decryption d'un string en Java -> Microsoft Crypto API


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Points : 38
    Points
    38
    Par défaut Traduction decryption d'un string en Java -> Microsoft Crypto API
    Bonjour à tous, j'ai essayé de traduire ce code C++ en java puis ça ne fonctionne pas. Est-ce que quelqu'un peut m'aide?

    C++

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    std::string &sCryptKeySeed;    // My encryption/decryption password
     
    HCRYPTPROV hCryptProv = NULL;
    HCRYPTHASH hHash      = NULL;
    HCRYPTKEY  hCryptKey  = NULL;
    DWORD iLen            = iSize;
    char *pData           = NULL;
     
    if(CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_MACHINE_KEYSET))
    {
        if(CryptCreateHash(hCryptProv, CALG_SHA1, 0, 0, &hHash))
        {
            if(CryptHashData(hHash, (BYTE *)sCryptKeySeed.c_str(), sCryptKeySeed.length(), 0))
            {
                if(CryptDeriveKey(hCryptProv, CALG_RC2, hHash, 0, &hCryptKey))
                {
                    if(CryptDecrypt(hCryptKey, NULL, TRUE, 0, (BYTE *)pData, &iLen))
                    {
                        sValue.assign(pData);
                    }
                }
            }
            CryptDestroyHash(hHash);
            hHash = NULL;
        }
        CryptReleaseContext(hCryptProv, 0);
        hCryptProv = NULL;
    }
    Ce que j'ai essayé et rien ne fonctionne...

    Java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    byte[] password = sCryptKeySeed.getBytes("UTF-8");
    byte iv[] = {1,2,3,4,5,6,7,8};
    MessageDigest digest = MessageDigest.getInstance("SHA-1");
    byte[] hash = digest.digest(password);
     
    Cipher rc2 = Cipher.getInstance("RC2");
    rc2.init(Cipher.DECRYPT_MODE, new SecretKeySpec(hash, "RC2"), new RC2ParameterSpec(128,iv));
    String decryptedValue = new String(rc2.doFinal(value.getBytes()), "UTF-8");
    Merci beaucoup

    Solution :

    Si ça intéresse quelqu'un la bonne façon de traduire ce code en C++ est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        MessageDigest digest = MessageDigest.getInstance("SHA-1");
        byte[] hash = digest.digest(sCryptKeySeed.getBytes());
     
        hash = Arrays.copyOfRange(hash, 0, 16);
     
        SecretKeySpec rc2keySPec = new SecretKeySpec(hash,"RC2");
        RC2ParameterSpec param = new RC2ParameterSpec(128, new byte[8]);
     
        Cipher rc2 = Cipher.getInstance("RC2/CBC/PKCS5Padding"); 
        rc2.init(Cipher.DECRYPT_MODE, rc2keySPec, param);
     
        String decryptedValue = new String(rc2.doFinal(value.getBytes()));
    Dernière question :

    Si j'inclue des "-" ou des "_" dans le sCryptKeySeed comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sCryptKeySeed = "SDFSD2-DF45-ASD5-BLA_BLA"
    La decryption génère des caractère étranges comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    4D7B2B4F7F14C544AD28C802tÅv¾)¨¸*E557912•062013
    Ce qui est supposé de sortir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    4D7B2B4F7F14C544AD28C80227849D54E5579127062013
    Est-ce que quelqu'un aurait une idée pourquoi il sort ceci?

  2. #2
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Points : 519
    Points
    519
    Billets dans le blog
    1
    Par défaut
    Slt,
    Pour la convertion String -> byte []
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String s = "...";
    byte [] b = s.getBytes ("UTF-8");
    L'inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String s = new String (b, "UTF-8");
    Bon courage

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/12/2009, 08h58
  2. Simple question à propos de String en java
    Par aminos88 dans le forum Langage
    Réponses: 3
    Dernier message: 22/05/2009, 13h59
  3. transformation de String to java.sql.date
    Par opensource dans le forum Langage
    Réponses: 7
    Dernier message: 07/03/2008, 18h23
  4. declaration string dans java
    Par kouki-raid dans le forum Langage
    Réponses: 15
    Dernier message: 29/08/2007, 09h52
  5. [String][ASCII]Java / Python
    Par chrdou dans le forum Général Java
    Réponses: 8
    Dernier message: 18/02/2005, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo