2010-12-03 37 views
2

J'utilise le code que j'ai trouvé here pour crypter à l'aide de DES. J'envoie cette valeur à un service tiers, mais cela ne semble pas fonctionner.Cryptage avec DES et mot de passe

Question au code donné, le sel et l'itération sont utilisés comme paramètres pour créer initialiser le chiffrement avec la spécification de paramètre:

// Prepare the parameter to the ciphers 
AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount); 

// Create the ciphers 
ecipher.init(Cipher.ENCRYPT_MODE, key , paramSpec); 
dcipher.init(Cipher.DECRYPT_MODE, key , paramSpec); 

Si je change le nombre d'itérations, j'ai des résultats différents.

Comment puis-je savoir ce qui est utilisé de l'autre côté du fil? La seule chose que je sais de ce service tiers, c'est que l'algorithme à utiliser est DES et bien sûr le mot de passe secret.

Qu'est-ce qui me manque?

+2

FWIW, DES n'est pas sécurisé et ne doit pas être utilisé dans des situations où vous vous attendez à ce que quelqu'un attaque sérieusement vos chiffrements. Si c'est le moyen le plus sûr de communiquer avec un service donné, espérons que vous n'êtes pas intéressant pour quiconque a beaucoup de puissance de calcul. –

+0

@David. Merci pour le commentaire. Yeap, nous sommes conscients de cela. Cela sera utilisé dans le réseau local. – OscarRyz

Répondre

2

"DES" lui-même est juste une itération unique. Son successeur, "Triple DES" crypte chaque bloc de données trois fois effectue trois itérations de l'algorithme. Si vous devez effectuer le cryptage en utilisant simplement "DES", une itération devrait être correcte.

En général, il est considéré comme une mauvaise pratique d'écrire vos propres fonctions cryptographiques pour autre chose que les implémentations de jouets. Écrire des bibliothèques sécurisées et correctes pour la cryptographie peut parfois être difficile. Envisagez d'utiliser le Java Cryptography Architecture, qui fait partie de la plate-forme Java SE 6.

+0

qu'en est-il du sel? En ce qui concerne les fonctions, le code que j'ai pointé utilise JCA. – OscarRyz

+0

Triple DES ne crypte pas techniquement trois fois. Il applique 3 fois l'algorithme DES pour crypter un bloc en le chiffrant, en le décryptant puis en le chiffrant de nouveau. –

+0

@Joel Qu'en est-il du sel? Que devrions-nous utiliser? – OscarRyz

1

Votre problème est que vous connaissez l'algorithme de chiffrement (DES) mais pas l'algorithme de génération de clé. Pour dériver une clé à partir d'un mot de passe, il y a beaucoup de possibilités. Le PBEParameterSpec de votre exemple utilise l'algorithme PKCS # 5 pour dériver la clé du mot de passe. C'est un très bon algorithme pour cela, mais souvent les gens essaient de développer eux-mêmes un algorithme simple - par ex. juste hacher le mot de passe ou certaines méthodes encore pires. La détection de la méthode utilisée n'est pas facile. Si vous avez une application qui fonctionne avec ce service tiers, vous pouvez essayer de l'inverser pour voir comment cela fonctionne.