Created
November 21, 2017 13:32
-
-
Save gogl92/fc39adf8972474157ec230221ca30c21 to your computer and use it in GitHub Desktop.
Java PHP encryption
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.cwilldev.crypt; | |
import java.security.NoSuchAlgorithmException; | |
import javax.crypto.Cipher; | |
import javax.crypto.NoSuchPaddingException; | |
import javax.crypto.spec.IvParameterSpec; | |
import javax.crypto.spec.SecretKeySpec; | |
public class ApiCrypter { | |
private String iv = "myuniqueivparam"; | |
private String secretkey = "mysecretkey"; | |
private IvParameterSpec ivspec; | |
private SecretKeySpec keyspec; | |
private Cipher cipher; | |
public ApiCrypter() | |
{ | |
ivspec = new IvParameterSpec(iv.getBytes()); | |
keyspec = new SecretKeySpec(secretkey.getBytes(), "AES"); | |
try { | |
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); | |
} catch (NoSuchAlgorithmException e) { | |
e.printStackTrace(); | |
} catch (NoSuchPaddingException e) { | |
e.printStackTrace(); | |
} | |
} | |
public byte[] encrypt(String text) throws Exception | |
{ | |
if(text == null || text.length() == 0) { | |
throw new Exception("Empty string"); | |
} | |
byte[] encrypted = null; | |
try { | |
cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); | |
encrypted = cipher.doFinal(text.getBytes("UTF-8")); | |
} | |
catch (Exception e) { | |
throw new Exception("[encrypt] " + e.getMessage()); | |
} | |
return encrypted; | |
} | |
public byte[] decrypt(String code) throws Exception | |
{ | |
if(code == null || code.length() == 0) { | |
throw new Exception("Empty string"); | |
} | |
byte[] decrypted = null; | |
try { | |
cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); | |
decrypted = cipher.doFinal(hexToBytes(code)); | |
} | |
catch (Exception e) { | |
throw new Exception("[decrypt] " + e.getMessage()); | |
} | |
return decrypted; | |
} | |
public static String bytesToHex(byte[] data) | |
{ | |
if (data==null) { | |
return null; | |
} | |
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; | |
} | |
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; | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<? | |
class ApiCrypter | |
{ | |
private $iv = 'fdsfds85435nfdfs'; #Same as in JAVA | |
private $key = '89432hjfsd891787'; #Same as in JAVA | |
public function __construct() { | |
} | |
public function encrypt($str) { | |
$str = $this->pkcs5_pad($str); | |
$iv = $this->iv; | |
$td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv); | |
mcrypt_generic_init($td, $this->key, $iv); | |
$encrypted = mcrypt_generic($td, $str); | |
mcrypt_generic_deinit($td); | |
mcrypt_module_close($td); | |
return bin2hex($encrypted); | |
} | |
public function decrypt($code) { | |
$code = $this->hex2bin($code); | |
$iv = $this->iv; | |
$td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv); | |
mcrypt_generic_init($td, $this->key, $iv); | |
$decrypted = mdecrypt_generic($td, $code); | |
mcrypt_generic_deinit($td); | |
mcrypt_module_close($td); | |
$ut = utf8_encode(trim($decrypted)); | |
return $this->pkcs5_unpad($ut); | |
} | |
protected function hex2bin($hexdata) { | |
$bindata = ''; | |
for ($i = 0; $i < strlen($hexdata); $i += 2) { | |
$bindata .= chr(hexdec(substr($hexdata, $i, 2))); | |
} | |
return $bindata; | |
} | |
protected function pkcs5_pad ($text) { | |
$blocksize = 16; | |
$pad = $blocksize - (strlen($text) % $blocksize); | |
return $text . str_repeat(chr($pad), $pad); | |
} | |
protected function pkcs5_unpad($text) { | |
$pad = ord($text{strlen($text)-1}); | |
if ($pad > strlen($text)) { | |
return false; | |
} | |
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) { | |
return false; | |
} | |
return substr($text, 0, -1 * $pad); | |
} | |
} | |
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
String res = new String( this.apiCrypter.decrypt( text ), "UTF-8" ); | |
res = URLDecoder.decode(res,"UTF-8"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
String res = new String( this.apiCrypter.decrypt( text ), "UTF-8" ); | |
res = URLDecoder.decode(res,"UTF-8"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
String encryptedRequest = ApiCrypter.bytesToHex(this.apiCrypter.encrypt(jsonParams.toString())); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php $encrypted = $ApiCrypter->encrypt($str); |
Hi, this script is pretty old I think it should be created from scratch using new algorithms, I don't recommend it to use it on production
Hello @gogl92
I was wondering if updating this to adapt to the new PHP
openssl_decrypt
andopenssl_encrypt
is too complicated? I tried a bit but I was unable to be able to do it.Thanks!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hello @gogl92
I was wondering if updating this to adapt to the new PHP
openssl_decrypt
andopenssl_encrypt
is too complicated? I tried a bit but I was unable to be able to do it.Thanks!