如何在java中使用AES加密String以获得与php Encrypt相同的结果?

时间:2018-01-13 16:11:55

标签: java php aes

这是我第一次加密字符串。

我已经使用AES测试了php和java加密。它的工作正常,但问题是,在java代码中做什么,我得到了相同的PHP结果?

我使用了php代码而没有做任何改动。

但我的Java需要改变,我得到相同的结果。

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Base64;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.security.MessageDigest;
import java.util.Arrays;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class aa_test extends AppCompatActivity {
    ImageView imageView;

    private static String decryptedString;
    private static String encryptedString;
    private static byte[] key;
    private static SecretKeySpec secretKey;
    Button de_button;
    TextView decryptTextView;
    Button en_button;
    TextView encryptTextView;



    public static String decrypt(String paramString)
    {
        try
        {
            Cipher localCipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
            localCipher.init(2, secretKey);
            paramString = new String(localCipher.doFinal(Base64.decode(paramString, 0)));
            return paramString;
        }
        catch (Exception e)
        {
            System.out.println("Error while decrypting: " + paramString.toString());
        }
        return null;
    }

    public static String encrypt(String paramString)
    {
        try
        {
            Cipher localCipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            localCipher.init(1, secretKey);
            paramString = Base64.encodeToString(localCipher.doFinal(paramString.getBytes("UTF-8")), 0);
            return paramString;

        }
        catch (Exception e)
        {
            System.out.println("Error while encrypting: " + paramString.toString());
        }
        return null;
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_aa_test);

        this.encryptTextView = ((TextView)findViewById(R.id.textView_encryptTextView));
        this.decryptTextView = ((TextView)findViewById(R.id.textView_decryptTextView));
        setKey("pin123");


    }

    public void setKey(String paramString)
    {
        try
        {
            key = paramString.getBytes("UTF-8");
            System.out.println(key.length);
            key = MessageDigest.getInstance("SHA-1").digest(key);
            key = Arrays.copyOf(key, 16);
            System.out.println(key.length);
            System.out.println(new String(key, "UTF-8"));
            secretKey = new SecretKeySpec(key, "AES");
            return;
        }
        catch (Exception e)
        {
            //----
            return;
        }

    }

    public void Encrypt_String(View view) {
        String paramAnonymousView = encryptTextView.getText().toString();
        if (paramAnonymousView.length() > 0){
            decryptTextView.setText(encrypt(paramAnonymousView));
        }else{Toast.makeText(aa_test.this.getApplicationContext(), "Please enter the value", Toast.LENGTH_LONG).show();}
    }

    public void Decrypt_String(View view) {
        String paramAnonymousView = encryptTextView.getText().toString();
        if (paramAnonymousView.length() > 0){
            decryptTextView.setText(decrypt(paramAnonymousView));
        }else{Toast.makeText(aa_test.this.getApplicationContext(), "Please enter the value", Toast.LENGTH_LONG).show();}
    }
}

xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.test.test.aa_test">

<TextView
    android:text="Hello"
    android:textSize="10pt"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/textView_encryptTextView"
    android:gravity="center" />

<TextView
    android:text="- - - -"

    android:textSize="10pt"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/textView_decryptTextView"
    android:gravity="center" />

<Button
    android:text="Encrypt"
    android:onClick="Encrypt_String"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/en_button" />

<Button
    android:text="Decrypt"
    android:onClick="Decrypt_String"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/de_button" />
</LinearLayout>

AES代码:https://aesencryption.net/

在Java中,我在这里进行了更改:

setDecryptedString(new String(cipher.doFinal(Base64.decodeBase64(strToDecrypt))));

例如,如果我加密单词&#34; Hello&#34;在PHP我得到:

sWcM31JA05RLA/1J9OellSa+BfbAOCBdKYRybcKNeS8=
//In php I use :
$data='Hello';   
$key= 'pin123';
$blocksize='256';
$mode=null;

现在的问题:

如何处理Java代码,我得到相同的PHP结果?

0 个答案:

没有答案