-
-
Save joeolaoye/6afc88a474aa086036c65b15abcf0947 to your computer and use it in GitHub Desktop.
import java.io.UnsupportedEncodingException; | |
import java.security.InvalidKeyException; | |
import java.security.MessageDigest; | |
import java.security.NoSuchAlgorithmException; | |
import java.util.Arrays; | |
import javax.crypto.BadPaddingException; | |
import javax.crypto.Cipher; | |
import javax.crypto.IllegalBlockSizeException; | |
import javax.crypto.NoSuchPaddingException; | |
import javax.crypto.SecretKey; | |
import javax.crypto.spec.SecretKeySpec; | |
import org.apache.commons.codec.binary.Base64; | |
/** | |
* | |
* @author josepholaoye | |
*/ | |
public class TripleDES { | |
String key; | |
public TripleDES(String myEncryptionKey) { | |
key = myEncryptionKey; | |
} | |
/** | |
* Method To Encrypt The String | |
* | |
* @param unencryptedString | |
* @return encrpted string | |
* @throws java.security.NoSuchAlgorithmException | |
* @throws java.io.UnsupportedEncodingException | |
* @throws javax.crypto.NoSuchPaddingException | |
* @throws java.security.InvalidKeyException | |
* @throws javax.crypto.IllegalBlockSizeException | |
* @throws javax.crypto.BadPaddingException | |
*/ | |
public String harden(String unencryptedString) throws NoSuchAlgorithmException, UnsupportedEncodingException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { | |
MessageDigest md = MessageDigest.getInstance("md5"); | |
byte[] digestOfPassword = md.digest(key.getBytes("utf-8")); | |
byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24); | |
for (int j = 0, k = 16; j < 8;) { | |
keyBytes[k++] = keyBytes[j++]; | |
} | |
SecretKey secretKey = new SecretKeySpec(keyBytes, "DESede"); | |
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); | |
cipher.init(Cipher.ENCRYPT_MODE, secretKey); | |
byte[] plainTextBytes = unencryptedString.getBytes("utf-8"); | |
byte[] buf = cipher.doFinal(plainTextBytes); | |
byte[] base64Bytes = Base64.encodeBase64(buf); | |
String base64EncryptedString = new String(base64Bytes); | |
return base64EncryptedString; | |
} | |
/** | |
* Method To Decrypt An Ecrypted String | |
* | |
* @param encryptedString | |
* @return | |
* @throws java.io.UnsupportedEncodingException | |
* @throws java.security.NoSuchAlgorithmException | |
* @throws javax.crypto.NoSuchPaddingException | |
* @throws java.security.InvalidKeyException | |
* @throws javax.crypto.IllegalBlockSizeException | |
* @throws javax.crypto.BadPaddingException | |
*/ | |
public String soften(String encryptedString) throws UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { | |
if(encryptedString == null) | |
{ | |
return ""; | |
} | |
byte[] message = Base64.decodeBase64(encryptedString.getBytes("utf-8")); | |
MessageDigest md = MessageDigest.getInstance("MD5"); | |
byte[] digestOfPassword = md.digest(key.getBytes("utf-8")); | |
byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24); | |
for (int j = 0, k = 16; j < 8;) { | |
keyBytes[k++] = keyBytes[j++]; | |
} | |
SecretKey secretKey = new SecretKeySpec(keyBytes, "DESede"); | |
Cipher decipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); | |
decipher.init(Cipher.DECRYPT_MODE, secretKey); | |
byte[] plainText = decipher.doFinal(message); | |
return new String(plainText, "UTF-8"); | |
} | |
} |
hi there,
Is it possible to add Main function to this to be used in cmd like (java TripleDES.java) which will take a key and the text from the user to encrypt it and decrypt it?
I was trying build this in python but I could not
Thank you
hi there,
Is it possible to add Main function to this to be used in cmd like (java TripleDES.java) which will take a key and the text from the user to encrypt it and decrypt it?
I was trying build this in python but I could not
Thank you
Yeah, you can add a main() function.
Thank you, it is working very fine.
I can't import org.apache.commons.codec.binary.Base64;
package org.apache.commons.codec.binary does not exist
I can't import org.apache.commons.codec.binary.Base64;
package org.apache.commons.codec.binary does not exist
What if the the key is in HEX format, will the byte[] digestOfPassword = md.digest(key.getBytes("utf-8")); still work ?
What if the the key is in HEX format, will the byte[] digestOfPassword = md.digest(key.getBytes("utf-8")); still work ?
Hopefully, as long as it is in the utf-8 encoding, it should work.
Thanks for the code. It works like a charm. Used this code to create a triple DES online tool.