Welcome to Srini's blog

Thursday, December 31, 2009

Encrypt in JAVA and Decrypt in PHP & Encrypt in PHP and Decrypt in JAVA

Encrypt in JAVA and decrypt in PHP:

1. Encryption in JAVA:
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class Crypto {
//iv length should be 16 bytes
private String iv = "fedcba9876543210";
private String key = null;
private Cipher cipher = null;
private SecretKeySpec keySpec = null;
private IvParameterSpec ivSpec = null;

/**
* Constructor
*
* @throws Exception
*/
public Crypto(String key) throws Exception {
this.key = key;

// Make sure the key length should be 16
int len = this.key.length();
if(len < 16) {
int addSpaces = 16 - len;
for (int i = 0; i < addSpaces; i++) {
this.key = this.key + " ";
}
} else {
this.key = this.key.substring(0, 16);
}
this.keySpec = new SecretKeySpec(this.key.getBytes(), "AES");
this.ivSpec = new IvParameterSpec(iv.getBytes());
this.cipher = Cipher.getInstance("AES/CBC/NoPadding");
}

/**
* Bytes to Hexa conversion
*
* @param data
* @return
*/
public 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;
}
}

/** Encrpt the goven string
*
* @param plainData
* @throws Exception
*/
public String encrypt(String plainData) throws Exception {

// Make sure the plainData length should be multiple with 16
int len = plainData.length();
int q = len / 16;
int addSpaces = ((q + 1) * 16) - len;
for (int i = 0; i < addSpaces; i++) {
plainData = plainData + " ";
}

this.cipher.init(Cipher.ENCRYPT_MODE, this.keySpec, this.ivSpec);
byte[] encrypted = cipher.doFinal(plainData.getBytes());

return bytesToHex(encrypted);
}

public static void main(String[] args) throws Exception {
Crypto c = new Crypto("D4:6E:AC:3F:F0:BE");
String encrStr = c.encrypt("Hello World");
System.out.println("Encrypted Str :" + encrStr);
}
}
2. After run this program we will get encrypted str, Now decrypt this str using PHP
3. Decryption in PHP
$cipher = "rijndael-128";
$mode = "cbc";
$secret_key = "D4:6E:AC:3F:F0:BE";
//iv length should be 16 bytes
$iv = "fedcba9876543210";

// Make sure the key length should be 16 bytes
$key_len = strlen($secret_key);
if($key_len < 16 ){
$addS = 16 - $key_len;
for($i =0 ;$i < $addS; $i++){
$secret_key.=" ";
}
}else{
$secret_key = substr($secret_key, 0, 16);
}

$td = mcrypt_module_open($cipher, "", $mode, $iv);
mcrypt_generic_init($td, $secret_key, $iv);
$decrypted_text = mdecrypt_generic($td, hex2bin("444e6969a269829a3e59a86300614fc5"));
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
echo trim($decrypted_text);

function hex2bin($hexdata) {
$bindata="";
for ($i=0;$i $bindata.=chr(hexdec(substr($hexdata,$i,2)));
}
return $bindata;
}
?>
4. You will get decrypted str as "Hello World".



Encrypt in PHP and decrypt in JAVA:

1. Encryption in PHP:
$cipher = "rijndael-128";
$mode = "cbc";
$secret_key = "D4:6E:AC:3F:F0:BE";
//iv length should be 16 bytes
$iv = "fedcba9876543210";

// Make sure the key length should be 16 bytes
$key_len = strlen($secret_key);
if($key_len < 16 ){
$addS = 16 - $key_len;
for($i =0 ;$i < $addS; $i++){
$secret_key.=" ";
}
}else{
$secret_key = substr($secret_key, 0, 16);
}

$td = mcrypt_module_open($cipher, "", $mode, $iv);
mcrypt_generic_init($td, $secret_key, $iv);
$cyper_text = mcrypt_generic($td, "Hello World");
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
echo bin2hex($cyper_text);
?>
2. After run this program we will get encrypted str, Now decrypt this str using JAVA
3. Decryption in JAVA

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class Crypto {
//iv length should be 16 bytes
private String iv = "fedcba9876543210";
private String key = null;
private Cipher cipher = null;
private SecretKeySpec keySpec = null;
private IvParameterSpec ivSpec = null;

/**
* Constructor
*
* @throws Exception
*/
public Crypto(String key) throws Exception {
this.key = key;

// Make sure the key length should be 16
int len = this.key.length();
if(len < 16) {
int addSpaces = 16 - len;
for (int i = 0; i < addSpaces; i++) {
this.key = this.key + " ";
}
} else {
this.key = this.key.substring(0, 16);
}
this.keySpec = new SecretKeySpec(this.key.getBytes(), "AES");
this.ivSpec = new IvParameterSpec(iv.getBytes());
this.cipher = Cipher.getInstance("AES/CBC/NoPadding");
}

/**
* Hexa to Bytes conversion
*
* @param str
* @return
*/
public 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;
}
}

/** Decrypt the given excrypted string
*
* @param encrStr
* @throws Exception
*/
public String decrypt(String encrData) throws Exception {
this.cipher.init(Cipher.DECRYPT_MODE, this.keySpec, this.ivSpec);
byte[] outText = this.cipher.doFinal(hexToBytes(encrData));

String decrData = new String(outText).trim();
return decrData;
}
public static void main(String[] args) throws Exception {
Crypto c = new Crypto("D4:6E:AC:3F:F0:BE");
String decrStr = c.decrypt("444e6969a269829a3e59a86300614fc5");
System.out.println("Decrypted Str :" + decrStr);
}
}
4. You will get decrypted str as "Hello World".

Tuesday, December 1, 2009

How to install native tomcat in LINUX

Steps to install native Tomcat in Linux :
1. First download latest native tomcat(tomcat-native-1.1.18-src.tar.gz) src from http://www.apache.org/dist/tomcat/tomcat-connectors/native/1.1.18/source/
2. Create temp location(eg. /tmp/tomcat) and copy downloded src into this folder
3. Run the following cmd to untar --> tar -xzvf tomcat-native-1.1.18-src.tar.gz
4. go to /tomcat-native-1.1.18-src/jni/native and run the cmd --> ./configure && make
5. It may propmt you an error as "apr is not located" and suggest give the cmd as --with-apr=APRDIR
The error because of apr is not installed in system. So now Install latest apr
Steps to Install apr :
6. Download latest apr(apr-1.3.9.tar.gz) src from
http://apache.opensourceresources.org/apr/
7. copy apr src into temp location(/tmp/tomcat).
8. Run the following cmd to untar --> tar -xzvf apr-1.3.9.tar.gz
9. Go to /apr-1.3.9 and run the cmd --> ./configure && make && make install.
So, apr installation completed. Now try to install native tomcat
10. go to /tomcat-native-1.1.18-src/jni/native and run the cmd --> ./configure && make
11. It may prompt you an error as "JDK is not located".
The error because of jdk is not installed in system(we need JDK to compile native
tomcat).So install latest JDK
Steps to install JDK :
12. Download latest JDK(jdk-6u17-linux-i586.bin) from http://java.sun.com/javase/downloads/index.jsp
13. Copy downloaded JDk into /usr/java(If location is not existed, create it and copy it).
14. Go to /usr/java and give permissions to jdk-6u17-linux-i586.bin file --> chmod 755 jdk-6u17-linux-i586.bin
15. install JDK using cmd --> ./jdk-6u17-linux-i586.bin
16. Follow the instructions carefully and install JDK.
17. If JDK installed successfully u can see 'jdk1.6.0_17' folder in /usr/java/.
18. Set java home path using cmds
i. JAVA_HOME="/usr/java/jdk1.6.0_17/"
ii. export JAVA_HOME.
So, JDK installation completed. Now try to install native tomcat.
19. go to /tomcat-native-1.1.18-src/jni/native and run the cmd --> ./configure && make.
20.Native tomcat installation completed successfully.

If you have any doubts/clarifications please let me know.