2016-11-25 35 views
-1

在我的IDE警告中顯示爲Android 4.3及更早版本上潛在的不安全隨機數。我可以取代AES/ECB/PKCS5Padding Android安全應用中的安全問題?

閱讀Android Development Blog更多信息

如何使它安全嗎?

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

首先,Android 4.3本質上並不安全。現在有多個漏洞,包括像StageFright這樣的遠程漏洞。

其次,我假設你在談論some-securerandom-thoughts.html,因爲你的鏈接已經死了。它是在談論隨機數字世代,但我沒有在你的代碼中看到。相反,我看到AES加密,它根本不是隨機的。

另外,看着Potentially insecure random numbers on Android 4.3 and older,此警告可能與先前版本的代碼有關,該代碼依賴於SecureRandom初始化KeyGenerator。

做一個'不安全'的谷歌搜索帶來了所有的一堆結果和意見,但它似乎對大多數人來說足夠安全。

話雖如此,做一個谷歌'ecb不安全'帶來了Why shouldn't I use ECB encryption?,這恰好證明了爲什麼它不安全。但是這在任何平臺上都不安全,不僅僅是Android 4.3。

希望這有幫助,並請澄清,如果警告確實來自此代碼段或指定確切的行。

+0

對,ECB的使用在這裏是一個明顯的問題。 –