Cryptography Tutorials - Herong's Tutorial Examples - v5.42, by Herong Yang
JceSunDesPaddingTest.java - JCE DES Padding Test
This section provides a tutorial example to test the PKCS5Padding schema used by the DES implementation in the JDK JCE package.
Let's modify the above testing program to see how PKCS5Padding schema works.
/* JceSunDesPaddingTest.java * Copyright (c) HerongYang.com. All Rights Reserved. */ import java.security.spec.*; import javax.crypto.*; import javax.crypto.spec.*; class JceSunDesPaddingTest { public static void main(String[] a) { if (a.length<2) { System.out.println("Usage:"); System.out.println("java JceSunDesPaddingTest 1/2/3" + " algorithm"); return; } String test = a[0]; String algorithm = a[1]; try { byte[] theKey = null; byte[] theMsg = null; byte[] theExp = null; if (test.equals("1")) { theKey = hexToBytes("133457799BBCDFF1"); theMsg = hexToBytes("0123456789ABCDEF"); theExp = hexToBytes("85E813540F0AB405"); } else if (test.equals("2")) { theKey = hexToBytes("38627974656B6579"); // "8bytekey" theMsg = hexToBytes("6D6573736167652E"); // "message." theExp = hexToBytes("7CF45E129445D451"); } else if (test.equals("3")) { theKey = hexToBytes("133457799BBCDFF1"); // = test 1 theMsg = hexToBytes("0808080808080808"); // PKCS5Padding theExp = hexToBytes("FDF2E174492922F8"); } else { System.out.println("Wrong option. For help enter:"); System.out.println("java JceSunDesPaddingTest"); return; } KeySpec ks = new DESKeySpec(theKey); SecretKeyFactory kf = SecretKeyFactory.getInstance("DES"); SecretKey ky = kf.generateSecret(ks); Cipher cf = Cipher.getInstance(algorithm); cf.init(Cipher.ENCRYPT_MODE,ky); byte[] theCph = cf.doFinal(theMsg); System.out.println("Key : "+bytesToHex(theKey)); System.out.println("Message : "+bytesToHex(theMsg)); System.out.println("Cipher : "+bytesToHex(theCph)); System.out.println("Expected: "+bytesToHex(theExp)); } catch (Exception e) { e.printStackTrace(); return; } } public static byte[] hexToBytes(String str) { if (str==null) { return null; } else if (str.length() < 2) { return null; } else { int len = str.length() / 2; byte[] buffer = new byte[len]; for (int i=0; i<len; i++) { buffer[i] = (byte) Integer.parseInt( str.substring(i*2,i*2+2),16); } return buffer; } } public static String bytesToHex(byte[] data) { if (data==null) { return null; } else { int len = data.length; String str = ""; for (int i=0; i<len; i++) { if ((data[i]&0xFF)<16) str = str + "0" + java.lang.Integer.toHexString(data[i]&0xFF); else str = str + java.lang.Integer.toHexString(data[i]&0xFF); } return str.toUpperCase(); } } }
Let's run this program with different options:
herong> javac JceSunDesPaddingTest.java herong> java JceSunDesPaddingTest 1 DES/ECB/NoPadding Key : 133457799BBCDFF1 Message : 0123456789ABCDEF Cipher : 85E813540F0AB405 Expected: 85E813540F0AB405 herong> java JceSunDesPaddingTest 1 DES/ECB/PKCS5Padding Key : 133457799BBCDFF1 Message : 0123456789ABCDEF Cipher : 85E813540F0AB405FDF2E174492922F8 Expected: 85E813540F0AB405 herong> java JceSunDesPaddingTest 1 DES Key : 133457799BBCDFF1 Message : 0123456789ABCDEF Cipher : 85E813540F0AB405FDF2E174492922F8 Expected: 85E813540F0AB405 herong> java JceSunDesPaddingTest 3 DES/ECB/PKCS5Padding Key : 133457799BBCDFF1 Message : 0808080808080808 Cipher : FDF2E174492922F8FDF2E174492922F8 Expected: FDF2E174492922F8
The results tells us that:
Table of Contents
Introduction to AES (Advanced Encryption Standard)
DES Algorithm - Illustrated with Java Programs
DES Algorithm Java Implementation
►DES Algorithm - Java Implementation in JDK JCE
DES Java Implementation in JDK by Sun
Steps of Using DES Algorithm in JDK JCE
Testing DES Algorithm in JDK JCE
►JceSunDesPaddingTest.java - JCE DES Padding Test
DES Encryption Operation Modes
PHP Implementation of DES - mcrypt
Blowfish - 8-Byte Block Cipher
Secret Key Generation and Management
Cipher - Secret Key Encryption and Decryption
RSA Implementation using java.math.BigInteger Class
Introduction of DSA (Digital Signature Algorithm)
Java Default Implementation of DSA
Private key and Public Key Pair Generation
PKCS#8/X.509 Private/Public Encoding Standards
Cipher - Public Key Encryption and Decryption
OpenSSL Introduction and Installation
OpenSSL Generating and Managing RSA Keys
OpenSSL Generating and Signing CSR
OpenSSL Validating Certificate Path
"keytool" and "keystore" from JDK
"OpenSSL" Signing CSR Generated by "keytool"
Migrating Keys from "keystore" to "OpenSSL" Key Files
Certificate X.509 Standard and DER/PEM Formats
Migrating Keys from "OpenSSL" Key Files to "keystore"