Qual é o tamanho da chave do Triple DES (DESede)?
Pelo que vi são 168 bits mas o método cipher.init só funciona quando passo uma chave com 24 bytes (192 bits).
Qual é o tamanho da chave do Triple DES (DESede)?
Pelo que vi são 168 bits mas o método cipher.init só funciona quando passo uma chave com 24 bytes (192 bits).
É 168, mas são usados apenas 7 bits de cada byte (o oitavo bit é paridade). Portanto você tem de passar 168 / 7 = 24 bytes.
Thingol
Então na hora de montar a chave devo gerar uma com tamanho de 168 bits e fazer algum tipo de transformação (adicionar os bits de paridade)?
Você pode fazer uma de duas coisas:
a) Usar KeyGenerator.getInstance (“DESede”) e KeyGenerator.generateKey() - ele já faz as coisas para você, inclusive ajustar a paridade;
b) Ou então, se você é ‘macho mesmo’ (ou gosta de reinventar a roda…), criar a chave na mão (192 bits) - algo como SecureRandom rand = new SecureRandom(); byte[] bytes = new byte[24]; rand.nextBytes(bytes); , e ajustar a paridade.
Dica: se você for ao site da Sun e baixar o fonte do JCE (no mesmo lugar de onde se baixa o fonte do JDK), dá para copiar, aham, se inspirar na implementação - veja em com.sun.crypto.provider.DESKeyGenerator.setParityBit