Question

Je suis en train d'écrire une implémentation Java d'une application écrit en C. Je ne peux pas modifier la version C, et la version Java doit partager des données chiffrées avec la version C.

Voici la partie pertinente du code de cryptage C:

makekeys(password,&key1,&key2); /* turns password into two 8 byte arrays */
fill_iv(iv); /* bytes 8 bytes of randomness into iv */
des_key_sched(&key1,ks1);
des_key_sched(&key2,ks2);
des_ede2_ofb64_encrypt(hashed,ctext,hashedlen,ks1,ks2,
                       &iv,&num);

Je vois que l'équivalent est JCE quelque chose comme:

SecretKey key = new SecretKeySpec(keyBytes, "DESede");
IvParameterSpec iv = new IvParameterSpec(new byte[8]);
Cipher cipher = Cipher.getInstance("DESede/?????/?????"); // transformation spec?
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
byte[] cipherTextBytes = cipher.doFinal(plaintext);

Questions:

  • Le code C prend deux clés, une entreprise criminelle commune prend. Comment puis-je concilier cela? Ajoutez juste les deux en un seul tableau? Dans quel ordre?
  • Quelle transformation spec (le cas échéant!) Est équivalent à des_ede2_ofb64_encrypt de OpenSSL? Comment puis-je savoir, qu'en interrogeant les étrangers sur Internet? ;)
Était-ce utile?

La solution

En réponse à votre dernière question, vous trouveriez en lisant la documentation sur les algorithmes spécifiques eux-mêmes. Les documents Sun ne supposent généralement que vous êtes déjà familier avec le sujet. Dans ce cas, vous sauriez que: triple DES est l'application de trois instances DES BCE indépendamment calées dans l'ordre; que la façon la plus courante de c'est ce qu'on appelle DES ede, ce qui signifie que les 1er et 3e instances DES sont dirigées dans le sens de chiffriez, mais la 2ème instance DES est exécutée dans la direction de Décrypter; que EDE3 trois moyens que chaque instance DES est codé de façon indépendante et ede2 signifie que les 1er et 3ème instances utilisent la même clé; qui signifie OFB64 mode de réaction de sortie de 64 bits.

Vous devriez obtenir le même résultat avec getInstance ( "DESede / OFB64 / NoPadding"), et en faisant le key1 les 8 1er octets de la touche DESede, key2 2ème et cle1 3ème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top