2010-04-21 6 views
0

Je crée une clé triple DES à partir d'un tableau d'octets ("skBytes") mais en appelant getEncoded sur la triple clé DES ("sk") et en la comparant au tableau d'octets, ils diffèrent! Ils sont presque les mêmes si vous regardez la sortie de la console, cependant. Comment créer une clé triple DES qui est exactement comme "skBytes"?Création d'une clé 3DES à partir des octets

byte[] skBytes = {(byte) 0x41, (byte) 0x0B, (byte) 0xF0, (byte) 0x9B, (byte) 0xBC, (byte) 0x0E, (byte) 0xC9, (byte) 0x4A, (byte) 0xB5, (byte) 0xCE, (byte) 0x0B, (byte) 0xEA, (byte) 0x05, (byte) 0xEF, (byte) 0x52, (byte) 0x31, (byte) 0xD7, (byte) 0xEC, (byte) 0x2E, (byte) 0x75, (byte) 0xC3, (byte) 0x1D, (byte) 0x3E, (byte) 0x61}; 
    DESedeKeySpec keySpec = new DESedeKeySpec(skBytes); 
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede"); 
    SecretKey sk = keyFactory.generateSecret(keySpec); 

    for(int i = 0; i < skBytes.length; i++) 
    { 
     System.out.println("(sk.getEncoded()[i], skBytes[i]) = (" + sk.getEncoded()[i] +", " + skBytes[i] + ")"); 
    } 

sortie Console:

(sk.getEncoded()[i], skBytes[i]) = (64, 65) 
(sk.getEncoded()[i], skBytes[i]) = (11, 11) 
(sk.getEncoded()[i], skBytes[i]) = (-15, -16) 
(sk.getEncoded()[i], skBytes[i]) = (-101, -101) 
(sk.getEncoded()[i], skBytes[i]) = (-68, -68) 
(sk.getEncoded()[i], skBytes[i]) = (14, 14) 
(sk.getEncoded()[i], skBytes[i]) = (-56, -55) 
(sk.getEncoded()[i], skBytes[i]) = (74, 74) 
(sk.getEncoded()[i], skBytes[i]) = (-75, -75) 
(sk.getEncoded()[i], skBytes[i]) = (-50, -50) 
(sk.getEncoded()[i], skBytes[i]) = (11, 11) 
(sk.getEncoded()[i], skBytes[i]) = (-22, -22) 
(sk.getEncoded()[i], skBytes[i]) = (4, 5) 
(sk.getEncoded()[i], skBytes[i]) = (-17, -17) 
(sk.getEncoded()[i], skBytes[i]) = (82, 82) 
(sk.getEncoded()[i], skBytes[i]) = (49, 49) 
(sk.getEncoded()[i], skBytes[i]) = (-42, -41) 
(sk.getEncoded()[i], skBytes[i]) = (-20, -20) 
(sk.getEncoded()[i], skBytes[i]) = (47, 46) 
(sk.getEncoded()[i], skBytes[i]) = (117, 117) 
(sk.getEncoded()[i], skBytes[i]) = (-62, -61) 
(sk.getEncoded()[i], skBytes[i]) = (28, 29) 
(sk.getEncoded()[i], skBytes[i]) = (62, 62) 
(sk.getEncoded()[i], skBytes[i]) = (97, 97) 
+1

Parité ajustant quelque chose ... – AOO

Répondre

5

DES clés sont de 56 bits et il est représenté en 8 octets. Chaque octet porte un bit de parité. La clé Triple DES est simplement 3 touches DES concaténées ensemble.

Lorsque vous créez des clés avec DESedeKeySpec et ajuste la parité pour vous. Vous devez donc fournir les octets avec la parité appropriée pour obtenir les mêmes valeurs codées.