Chaves Criptográficas - Double DES

Boa tarde!

Estou precisando no meu sistema utilizar uma chave criptográfica DoubleDes, esou tenado criqar no Java mais não estou conseguindo, apenas estou conseguindo criar chave Des e Triple Des. Alguem sabria como posso criar.

Obrigado!

Olá Filipe,

É possível gerar chaves Double DES através do algoritmo DESede - Triple DES.

  • Uma chave Triple DES contém 192 bits - 24 bytes, desses, 24 são bits de pariedade e os 168 bits restantes são usados para operações criptográficas.

  • Uma chave Double DES contém 128 bits - 16 bytes, desses, 16 são bits de pariedade e os 112 bits restantes são usados para operações criptográficas.

Essas especificações se encontram na framework Java Cryptography Extension - JCE
Guia de Referência: http://java.sun.com/j2se/1.5.0/docs/guide/security/jce/JCERefGuide.html#AppA

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;

public class DES2 {
	public static void main(String args[]) {
		SecretKey doubledes;
		
		try {
			KeyGenerator key = KeyGenerator.getInstance("DESede");
			// O método init permite que seja especificado em bits o tamanho da chave que será criada.
			// No nosso caso Double DES - 112 bits.
			key.init(112);
			doubledes = key.generateKey();
			
			// A chave retornada terá o tamanho de 24 bytes, mas os 8 últimos bytes são despresívies no nosso caso.
			// Eles são equivalentes aos 8 primeiros bytes da chave - Atenção: Isso é somente no caso de chaves Double DES.
			byte[] chave = doubledes.getEncoded();			
		} catch(NoSuchAlgorithmException ex) {
			ex.printStackTrace();
		}
	}
}

Exemplo:

com… key.init( 112 ): Double DES
Chave retornada em hexadecimal:
5b 26 b3 34 fe 45 37 75 76 0d fb 32 45 f2 1a 75 5b 26 b3 34 fe 45 37 75
(Reparem os primeiros 8 bytes com os 8 últimos, São IGUAIS)

com… key.init( 168 ): Triple DES
Chave retornada em hexadecimal:
10 b5 cb ef d3 70 86 7a 79 68 61 85 b0 23 04 13 c1 7f 34 2a c4 19 0d bc
(Reparem os primeiros 8 bytes com os 8 últimos, São DIFERENTES)

Espero ter ajudado =D
Abraço !