2015-04-06 46 views
0
package com.androidedsoft.aesencryptor; 

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

import javax.crypto.Cipher; 
import javax.crypto.KeyGenerator; 
import javax.crypto.SecretKey; 
import android.util.Base64; 

import org.apache.commons.codec.Decoder; 
import org.apache.commons.codec.Encoder; 

public class MainActivity extends ActionBarActivity { 
    public static SecretKey secretKey; 
    static Cipher cipher; 

Button encryptbutton; 
String plainText; 

public static void main(String[] args) throws Exception { 

    KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); 
    keyGenerator.init(128); //key is 128 bit 
    SecretKey secretKey = keyGenerator.generateKey(); 
    cipher = Cipher.getInstance("AES"); //sets as AES encryption type 
} 

public void btnClick() { 
    encryptbutton = (Button) findViewById(R.id.encryptbutton); 
    encryptbutton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

錯誤1獲取的錯誤,我解決不了

  String encryptedText = encrypt(plainText, secretKey); 

  EditText Resultbox = (EditText) findViewById(R.id.Resultbox); 
      Resultbox.setText(String.valueOf(encryptedText)); 
     } 
    }); 
} 

public static String encrypt(String plainText, SecretKey secretKey) 
     throws Exception { 
    byte[] plainTextByte = plainText.getBytes(); 
    cipher.init(Cipher.ENCRYPT_MODE, secretKey); 
    byte[] encryptedByte = cipher.doFinal(plainTextByte); 

錯誤2

Encoder encoder = Base64.getEncoder(); 
    String encryptedText = encoder.encodeToString(encryptedByte); 

 return encryptedText; 
} //defines the encryption function 

public static String decrypt(String encryptedText, SecretKey secretKey) 
     throws Exception { 

錯誤3

Decoder decoder = Base64.getDecoder(); 

byte[] encryptedTextByte = (byte[]) decoder.decode(encryptedText); 
    cipher.init(Cipher.DECRYPT_MODE, secretKey); 
    byte[] decryptedByte = cipher.doFinal(encryptedTextByte); 
    String decryptedText = new String(decryptedByte); 
    return decryptedText; 
} //defines the decryption function 


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


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
    } 
} 

在線路51,52和58我越來越無法解析方法錯誤,不知道如何解決這些問題。在第39行,我得到一個未處理的異常錯誤。任何人有任何想法如何解決這個問題?我不知道我是不是進口東西,但是我能找到的所有東西都包含在我已有的進口產品中。

+3

請提供的代碼在noticable方式的線條和錯誤,使我們不」我們不得不自己來計算線.. –

+0

你有沒有確保Apache Commons的導入可以工作,可以通過libs文件夾中的.jar文件,gradle等? – FWeigl

回答

0

這是我正在使用的SimpleCrypto類。它基本上是this thread和我爲了正常工作所做的一些小修復的組合。

SimpleCrypto.java

public class SimpleCrypto{ 
public static String encrypt(String seed, String cleartext) throws Exception 
{ 
    byte[] rawKey = getRawKey(seed.getBytes()); 
    byte[] result = encrypt(rawKey, cleartext.getBytes()); 
    return toHex(result); 
} 

public static String decrypt(String seed, String encrypted) throws Exception 
{ 
    byte[] rawKey = getRawKey(seed.getBytes()); 
    byte[] enc = toByte(encrypted); 
    byte[] result = decrypt(rawKey, enc); 
    return new String(result); 
} 

private static byte[] getRawKey(byte[] seed) throws Exception 
{ 
    KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
    SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); 
    sr.setSeed(seed); 
    kgen.init(128, sr); // 192 and 256 bits may not be available 
    SecretKey skey = kgen.generateKey(); 
    byte[] raw = skey.getEncoded(); 
    return raw; 
} 


private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception 
{ 
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 
    Cipher cipher = Cipher.getInstance("AES"); 
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec); 
    byte[] encrypted = cipher.doFinal(clear); 
    return encrypted; 
} 

private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception 
{ 
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 
    Cipher cipher = Cipher.getInstance("AES"); 
    cipher.init(Cipher.DECRYPT_MODE, skeySpec); 
    byte[] decrypted = cipher.doFinal(encrypted); 
    return decrypted; 
} 

public static String toHex(String txt) 
{ 
    return toHex(txt.getBytes()); 
} 

public static String fromHex(String hex) 
{ 
    return new String(toByte(hex)); 
} 

public static byte[] toByte(String hexString) 
{ 
    int len = hexString.length()/2; 
    byte[] result = new byte[len]; 
    for (int i = 0; i < len; i++) 
     result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2), 16).byteValue(); 
    return result; 
} 

public static String toHex(byte[] buf) 
{ 
    if (buf == null) 
     return ""; 
    StringBuffer result = new StringBuffer(2 * buf.length); 
    for (int i = 0; i < buf.length; i++) 
    { 
     appendHex(result, buf[i]); 
    } 
    return result.toString(); 
} 

private final static String HEX = "ABCDEF"; 

private static void appendHex(StringBuffer sb, byte b) 
{ 
    sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f)); 
} 
} 

您可以使用它像這樣:

String cryptoString = SimpleCrypto.encrypt(masterpassword, cleartext); String clearString = SimpleCrypto.decrypt(masterpassword, crypto);