Java 为了安卓应用程序的安全考虑,我可以用哪一个替换AES/ECB/PKCS5P?

Java 为了安卓应用程序的安全考虑,我可以用哪一个替换AES/ECB/PKCS5P?,java,android,security,encryption,Java,Android,Security,Encryption,在我的IDE中,在Android 4.3及更高版本上,警告显示为潜在的不安全随机数 阅读更多信息 如何使它安全 package com.example.encryptographytest; import java.security.Security; import java.security.spec.KeySpec; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.Secr

在我的IDE中,在Android 4.3及更高版本上,警告显示为潜在的不安全随机数

阅读更多信息

如何使它安全

package com.example.encryptographytest;

import java.security.Security;
import java.security.spec.KeySpec;    
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class MainActivity extends ActionBarActivity {

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

        String key = "1234567891234567";
      String data = "example";
     Log.d("CRYPTO-TEST", ""+ decrypt(encrypt(data, key), key));
      Log.d("CRYPTO-TEST", ""+encrypt(data, key));  
    }

    public static String encrypt(String input, String key){
      byte[] crypted = null;
      try{
        SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
          Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
          cipher.init(Cipher.ENCRYPT_MODE, skey);
          crypted = cipher.doFinal(input.getBytes());
        }catch(Exception e){
            System.out.println(e.toString());
        }
     return new String(Base64.encode(crypted, Base64.DEFAULT));    

       // return new String(Base64.encodeBase64(crypted));
    }

    public static String decrypt(String input, String key){
        byte[] output = null;
        try{
          SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
          Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
          cipher.init(Cipher.DECRYPT_MODE, skey);
          output = cipher.doFinal( Base64.decode(input, Base64.DEFAULT));
        }catch(Exception e){
          System.out.println(e.toString());
        }
        return new String(output);
    }     
}

首先,安卓4.3本质上是不安全的。现在有多种漏洞利用,包括远程漏洞利用,如StageFright

第二,我想你是在说,因为你的链接已经失效了。这是关于随机数的生成,但我在你的代码中没有看到。相反,我看到的是AES加密,它根本不是随机的

另外,请注意,此警告可能与以前版本的代码有关,该代码依赖于SecureRandom来初始化KeyGenerator

在谷歌上搜索“aes不安全”会得到所有的结果和意见,但对大多数人来说似乎已经足够安全了

话虽如此,为“欧洲央行不安全”做一个谷歌搜索会带来一些问题,这很好地说明了为什么它不安全。但这在任何平台上都是不安全的,不仅仅是安卓4.3


希望这有帮助,请澄清警告是否真的来自此代码片段或指定确切的行。

没错,使用ECB是这里的明显问题。