JBoss Uses Pretty Simple process to encrypt and decrypt plain
text Strings to encrypt. The encryption is provided by JBoss. The code for
encryption and decryption are as below.
|
import java.math.BigInteger;
import
java.security.InvalidKeyException;
import
java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import
javax.crypto.IllegalBlockSizeException;
import
javax.crypto.NoSuchPaddingException;
import
javax.crypto.spec.SecretKeySpec;
public class DecodeIdentity {
private static String encode(String secret) throws
NoSuchPaddingException, NoSuchAlgorithmException,InvalidKeyException,
BadPaddingException, IllegalBlockSizeException{
byte[] kbytes = "jaas is the way".getBytes();
SecretKeySpec key = new SecretKeySpec(kbytes, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encoding = cipher.doFinal(secret.getBytes());
BigInteger n = new BigInteger(encoding);
return n.toString(16);
}
private static char[] decode(String secret)throws
NoSuchPaddingException, NoSuchAlgorithmException,InvalidKeyException,
BadPaddingException, IllegalBlockSizeException{
byte[] kbytes = "jaas is the way".getBytes();
SecretKeySpec key = new SecretKeySpec(kbytes, "Blowfish");
BigInteger n = new BigInteger(secret, 16);
byte[] encoding = n.toByteArray();
//SECURITY-344: fix leading zeros
if (encoding.length % 8 != 0){
int length = encoding.length;
int newLength = ((length / 8) + 1) *
8;
int pad = newLength - length;
//number of leading zeros
byte[] old = encoding;
encoding = new byte[newLength];
for (int i = old.length - 1; i >=
0; i--){
encoding[i + pad] = old[i];
}
if (n.signum() == -1){
for (int i = 0; i < newLength
- length; i++){
encoding[i] = (byte) -1;
}
}
}
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decode = cipher.doFinal(encoding);
return new String(decode).toCharArray();
}
public static void main(String[] args) throws Exception{
if(args.length == 2){
if
(args[0].equals("encode")){
String encode = encode(args[1]);
System.out.println("Encoded
password: " + encode);
}else if
(args[0].equals("decode")){
System.out.println(decode(args[1]));
}else{
System.out.println("Function not defined");
}
}
}
}
|

1 comment:
Hello,
thank you for your article.
I'm trying to find how to decrypt datasource password in windows. I Have tried your code but maybe i do something wrong, and it doesn't work.
I created a file named DecodeIdentity.java with the content of your article and save it in the Java folder in Program files.
After that i called cmd and start the file, but it only open the file.
Could you please help me with this?
Thank you!
Post a Comment