2010-07-13 23 views
0

J'ai une application développée sur BlackBerry JE 4.6.1 qui déchiffre une information de WebServer en utilisant DES algorythm. Si j'envoie des informations cryptées au serveur, elles sont bien décryptées. Mais dans le cas où le serveur envoie une donnée cryptée, je n'obtiens pas la valeur correcte après déchiffrement. La clé est censée être la même et les informations cryptées sont envoyées en base64. Au cours du débogage, j'ai découvert que, après la création de DESKey, ses données internes diffèrent du tableau d'octets transmis au constructeur. Par exemple, si je crée le Deskey la prochaine voieQuel est le problème avec ma DESKey (API BlackBerry)?

String keyStr = "2100000A"; 
DESKey desKey = new DESKey(keyStr.getBytes()); // pass the byte array {'2','1','0','0','0','0','0','A'} 

la méthode desKey.getData() retourne le tableau d'octets { '2', '1', '1', '1', '1', '1', '1', '@'} qui diffère des octets de clé initiaux.

Est-il possible qu'un tel comportement de la clé DES soit la raison pour laquelle je ne peux pas décrypter des données du serveur?

Merci.

Répondre

0

Le comportement desKey.getData() est attendu.

Les doc états:

DES opère sur des blocs de 64 bits et a une longueur de clé effective de 56 bits. En la réalité, la clé est de 64 bits, mais sont 8 bits de parité utilisée, ce qui signifie que la longueur de clé effective est seulement 56 bits. Chaque huitième bit est utilisé pour la parité et c'est le bit le moins significatif qui est utilisé pour la parité.

bit de parité definition:

un bit de parité, ou vérifier bit est un bit qui est ajouté pour garantir que le nombre de bits ayant la valeur un dans un ensemble de bits est pair ou impair . Les bits de parité sont utilisés comme la forme la plus simple de code de détection d'erreur.

Alors, voici comment cela se passe:

'2' => 0x32 => 00110010 => 0011001 + (parity bit 0) => 00110010 => 0x32 => '2' 
'1' => 0x31 => 00110001 => 0011000 + (parity bit 1) => 00110001 => 0x31 => '1' 
'0' => 0x30 => 00110000 => 0011000 + (parity bit 1) => 00110001 => 0x31 => '1' 
'0' => 0x30 => 00110000 => 0011000 + (parity bit 1) => 00110001 => 0x31 => '1' 
'0' => 0x30 => 00110000 => 0011000 + (parity bit 1) => 00110001 => 0x31 => '1' 
'0' => 0x30 => 00110000 => 0011000 + (parity bit 1) => 00110001 => 0x31 => '1' 
'0' => 0x30 => 00110000 => 0011000 + (parity bit 1) => 00110001 => 0x31 => '1' 
'A' => 0x41 => 01000001 => 0100000 + (parity bit 0) => 01000000 => 0x40 => '@'