3

Hi I want to decrypting my php encrypted string. My code is

UsingPHP.java

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.util.Base64;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class UsingPHP extends Activity {
    TextView encrypt_txt1, encrypt_txt2, decrypt_txt1, decrypt_txt2;
    Button decrypt_but;
    String original_value = "";
    String encrypted_value = "";
    byte[] byteArray1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.decrypt);

        encrypt_txt1 = (TextView) findViewById(R.id.entv1);
        encrypt_txt2 = (TextView) findViewById(R.id.entv2);
        decrypt_txt1 = (TextView) findViewById(R.id.decrytv1);
        decrypt_txt2 = (TextView) findViewById(R.id.decrytv2);
        decrypt_but = (Button) findViewById(R.id.decrybt);

        decrypt_but.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {
                try {

                    ArrayList < NameValuePair > postParameters = new ArrayList < NameValuePair > ();
                    String response = null;

                    response = CustomHttpClient.executeHttpPost(
                        "http://10.0.2.2/cyrpt/encrypt.php",
                    postParameters);
                    String res = response.toString();
                    System.out.println("HTTP Response comes here.......");
                    System.out.println(res);

                    JSONArray jArray = new JSONArray(res);
                    System.out.println("JSON Array created.....");

                    JSONObject json_data = null;
                    System.out.println("JSON data created......");
                    for (int i = 0; i < jArray.length(); i++) {
                        System.out.println("values fetched from the database.....");
                        json_data = jArray.getJSONObject(i);
                        original_value = json_data.getString("value");
                        encrypted_value = json_data.getString("encryptedvalue");
                        encrypt_txt2.setText(encrypted_value);
                        System.out.println(original_value);
                        System.out.println(encrypted_value);

                    }

                    System.out.println("Decrypt button has been clicked");
                    System.out.println("My encryption string is--->" + encrypted_value);
                    int encrypt_len = encrypted_value.length();
                    System.out.println(encrypt_len);

                    try {
                        System.out.println("Encrypted values going to decrrypted......");
                        byteArray1 = Base64.decode(encrypted_value, encrypt_len);
                        String decrypt = new String(byteArray1, "UTF-8");

                        System.out.println("Values decrypted-->" + decrypt);
                        decrypt_txt2.setText(decrypt);
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
} 

encrypt.php

<?php
require_once("connection.php");
$value = 'malavika';
function encode5t($value1)
{
    for ($i = 0; $i < 3; $i++) {
        $value1 = strrev(base64_encode($value1));
    }

    return $value1;
}

$myvalue = encode5t($value);

$mydata = mysql_query("SELECT * FROM crypt");
while ($row = mysql_fetch_assoc($mydata))
    $sam = $row['value'];
if ($sam != 'malavika')
    $myinsert = mysql_query("insert into crypt values('" . $value . "','" . $myvalue . "')") or die(mysql_error());
$data = mysql_query("SELECT * FROM crypt");

while ($row = mysql_fetch_assoc($data))
    $output[] = $row;
print(json_encode($output));
?>

Now I want to decrypt my encrypted value in android. But I got this following warning:

  12-23 10:27:19.343: WARN/System.err(609): java.lang.IllegalArgumentException: bad base-64
  12-23 10:27:19.353: WARN/System.err(609):     at android.util.Base64.decode(Base64.java:161)
  12-23 10:27:19.353: WARN/System.err(609):     at android.util.Base64.decode(Base64.java:136)
  12-23 10:27:19.363: WARN/System.err(609):     at android.util.Base64.decode(Base64.java:118)
  12-23 10:27:19.363: WARN/System.err(609):     at com.my.databaseconnection.UsingPHP$1.onClick(UsingPHP.java:76)
  12-23 10:27:19.363: WARN/System.err(609):     at android.view.View.performClick(View.java:2485)
  12-23 10:27:19.363: WARN/System.err(609):     at  android.view.View$PerformClick.run(View.java:9080)
 12-23 10:27:19.363: WARN/System.err(609):     at android.os.Handler.handleCallback(Handler.java:587)
 12-23 10:27:19.373: WARN/System.err(609):     at android.os.Handler.dispatchMessage(Handler.java:92)
 12-23 10:27:19.373: WARN/System.err(609):     at android.os.Looper.loop(Looper.java:123)
 12-23 10:27:19.373: WARN/System.err(609):     at android.app.ActivityThread.main(ActivityThread.java:3647)
 12-23 10:27:19.383: WARN/System.err(609):     at java.lang.reflect.Method.invokeNative(Native Method)
 12-23 10:27:19.383: WARN/System.err(609):     at java.lang.reflect.Method.invoke(Method.java:507)
 12-23 10:27:19.383: WARN/System.err(609):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
 12-23 10:27:19.383: WARN/System.err(609):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
 12-23 10:27:19.393: WARN/System.err(609):     at dalvik.system.NativeStart.main(Native Method)

How can I do this? Is it possible? Can anybody tell me? Thanks in advance

5
  • It seems like PHP and Java have different implementations of base-64. Commented Dec 23, 2011 at 5:12
  • Is it possible or not? Any other way to achieve this? Commented Dec 23, 2011 at 5:13
  • 1
    byteArray1 = Base64.decode(encrypted_value, encrypt_len); <- the second parameter of Base64.decode does not contain the length but rather flags for the decoding-method. This can lead to different results depending on the string size. Try this: byteArray1 = Base64.decode(encrypted_value, Base64.DEFAULT) Commented Dec 23, 2011 at 5:46
  • I tried with this too Base64.decode(encrypted_value, Base64.DEFAULT). It doesn't works. It execute up to try { System.out.println("Encrypted values going to decrypted......"); only Commented Dec 23, 2011 at 5:55
  • I don't see any encryption in your code. Commented Feb 7, 2013 at 8:48

2 Answers 2

2

Hi just change like this.

UsingPHP.java

try 
{
   System.out.println("Encrypted values going to decrypt......");
   byteArray1 = Base64.decode(encrypted_value, Base64.DEFAULT);
   System.out.println(byteArray1);
   String decrypt = new String(byteArray1, "UTF-8");                                   
   System.out.println("Values decrypted-->"+decrypt);
   decrypt_txt2.setText(decrypt);
}

encrypt.php

  <?php
  require_once("connection.php");
  $value='dcplsoft';
  function encode5t($value1)
  {
  $value1=base64_encode($value1);  // here you will get encrypted value
return $value1;
  }
$myvalue=encode5t($value);
    $mydata=mysql_query("SELECT * FROM crypt"); 
    while($row = mysql_fetch_assoc( $mydata )) 
    $sam=$row['value'];
    if($sam!='dcplsoft')
    $myinsert=mysql_query("insert into crypt values('".$value."','".$myvalue."')") or die (mysql_error());
    $data = mysql_query("SELECT * FROM crypt"); 
 while($row = mysql_fetch_assoc( $data )) 
$output[]=$row;
 print(json_encode($output));
    ?>          
Sign up to request clarification or add additional context in comments.

Comments

1

Well there are two things:

  1. Your encode5t function returns invalid base64 data. If I call encode5t("malavika") then the string ==AUVVVeZhlQhdlRspnUsRW is returned which is not valid base64. The = sign is the padding and is only allowed at the end of the base64-string. I guess what you wanted is:

    function encode5t($value1)
    {
        for($i=0;$i<3;$i++)
        {
            $value1=base64_encode(strrev($value1));
        }
    
        return $value1;
    }
    

    That means you just have to first call strrev and then base64_encode. And in the decode-function you first call base64_decode and then strrev (or the Java counter-parts).

  2. As I've said in the comment, the second Parameter to Base64.decode in your Java-code is expects flags for the base64-processing and not the length of the string. This might for example turn on the URL_SAFE flag which makes it incompatible with the output of PHP's base64_encode.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.