Está en la página 1de 9

ITT

Documento de DES elaborado con netbeans

SEGURIDAD
INFORMATICA
Cifrado DES

Integrantes:
CESAR ESTEBAN CANUL MUKUL
JESSICA NATIVIDAD ZIMA TUN
GILMER EFRAIN PUC MANDUJANO

DES
(Data Encryption Standard)
DES (Data Encryption Standard, estndar de cifrado de
datos) es un algoritmo desarrollado originalmente por
IBM a requerimiento del NBS (National Bureau of
Standards, Oficina Nacional de Estandarizacin, en la
actualidad denominado NIST, National Institute of
Standards and Technology, Instituto Nacional de
Estandarizacin y Tecnologa) de
EE.UU. y posteriormente modificado y adoptado por el
gobierno de EE.UU. en 1977 como estndar de cifrado de
todas las informaciones sensibles no clasificadas.
Posteriormente, en 1980, el NIST estandariz los
diferentes modos de operacin del algoritmo. Es el ms
estudiado y utilizado de los algoritmos de clave simtrica.
El nombre original del algoritmo, tal como lo denomin
IBM, era Lucifer. Trabajaba sobre bloques de 128 bits,
teniendo la clave igual longitud. Se basaba en
operaciones lgicas booleanas y poda ser implementado
fcilmente, tanto en software como en hardware.
Tras las modificaciones introducidas por el NBS,
consistentes bsicamente en la reduccin de la longitud
de clave y de los bloques, DES cifra bloques de 64 bits,
mediante permutacin y sustitucin y usando una clave
de 64 bits, de los que 8 son de paridad (esto es, en
realidad usa 56 bits), produciendo as 64 bits cifrados.

DES tiene 19 etapas diferentes.


La primera etapa es una transposicin, una permutacin inicial (IP) del
texto plano de 64 bits, independientemente de la clave. La ltima etapa
es otra transposicin (IP-1), exactamente la inversa de la primera. La
penltima etapa intercambia los 32 bits de la izquierda y los 32 de la
derecha. Las 16 etapas restantes son una Red de Feistel de 16 rondas.

En cada una de las 16 iteraciones se emplea un valor, Ki, obtenido a


partir de la clave de 56 bits y distinto en cada iteracin.

Figura 2: Clculo de las sub claves, K

La funcin f de la red de Feistel se compone de una permutacin de expansin (E),


que convierte el bloque correspondiente de 32 bits en uno de
48. Despus realiza una or-exclusiva con el valor Ki , tambin de 48 bits, aplica ocho
S-Cajas de 6*4 bits, y efecta una nueva permutacin (P).

CODIGO DE LOS METODOS EN JAVA DE


DES
import
import
import
import
import
import

java.io.UnsupportedEncodingException;
java.security.InvalidKeyException;
java.security.NoSuchAlgorithmException;
java.security.spec.*;
javax.crypto.*;
javax.crypto.spec.DESKeySpec;

/**
* @author JF
* Esta clase Encripta una cadena y luego la convierte a Base64
*/
public class ClaseDESBase64 {
Cipher encrypt;
Cipher decrypt;
SecretKey key;
String keyTxt;
public ClaseDESBase64(String clave){
keyTxt = clave;
try{
encrypt = Cipher.getInstance("DES");
decrypt = Cipher.getInstance("DES");
if(keyTxt.equals("")){
SecretKey key = KeyGenerator.getInstance("DES").generateKey();//Genera
Clave automtica
encrypt.init(Cipher.ENCRYPT_MODE, key);//Con clave aleatoria
decrypt.init(Cipher.DECRYPT_MODE, key);//Con clave aleatoria
}else{
KeySpec ks = new DESKeySpec(keyTxt.getBytes("UTF8"));
SecretKeyFactory kf = SecretKeyFactory.getInstance("DES");
SecretKey ky = kf.generateSecret(ks);
encrypt.init(Cipher.ENCRYPT_MODE, ky);
decrypt.init(Cipher.DECRYPT_MODE, ky);
}
}catch(InvalidKeySpecException ex){
}catch(UnsupportedEncodingException ex){
}catch(InvalidKeyException ex){
}catch(NoSuchAlgorithmException ex){
}catch(NoSuchPaddingException ex){
}
}
public String encriptar(String str){ //Metodo para Desencriptar
try {
// Encode the string into bytes using utf-8
byte[] utf8 = str.getBytes("UTF8");

// Encrypt
byte[] enc = encrypt.doFinal(utf8);
// Encode bytes to base64 to get a string
return new sun.misc.BASE64Encoder().encode(enc);
catch (javax.crypto.BadPaddingException e) {
catch (IllegalBlockSizeException e) {
catch (UnsupportedEncodingException e) {
catch (java.io.IOException e) {

}
}
}
}
}
return null;

public String desencriptar(String str) { // El metodo para Desencriptar


try {
// Decode base64 to get bytes
byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);
// Decrypt
byte[] utf8 = decrypt.doFinal(dec);
// Decode using utf-8
return new String(utf8, "UTF8");
catch (javax.crypto.BadPaddingException e) {
catch (IllegalBlockSizeException e) {
catch (UnsupportedEncodingException e) {
catch (java.io.IOException e) {

}
}
}
}
}
return null;
}

NUESTRA VENTANA DE NETBEANS

TEXTO ENCRIPTADO Y
DESENCRIPTADO
TEXTO A CIFRAR = TEXTO CIFRADO CON
DES TTT
TEXTO CIFRADO =
4QmHlJE8R8d5Zlf7BZUhvgxn40LWuqbsvk+
si0pbPIU=

También podría gustarte