Java 为了安卓应用程序的安全考虑,我可以用哪一个替换AES/ECB/PKCS5P?
在我的IDE中,在Android 4.3及更高版本上,警告显示为潜在的不安全随机数 阅读更多信息 如何使它安全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
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是这里的明显问题。