2012-02-12 16 views
0

私は暗号化に以下のコードを使用しています。Android 2.2以降ではうまくいきますが、Android 2.1で暗号化/復号化メソッドを呼び出すと強制終了します。 Android 2.1をサポートするようにすることはできますか、またはAndroid 2.1で動作させるための他のソリューションはありますか?AES128 Android 2.1のサポートEclair

package com.chaos.sitelogins; 

import android.util.Base64; 

import javax.crypto.BadPaddingException; 
import javax.crypto.Cipher; 
import javax.crypto.IllegalBlockSizeException; 
import javax.crypto.NoSuchPaddingException; 
import javax.crypto.spec.IvParameterSpec; 
import javax.crypto.spec.SecretKeySpec; 
import java.io.IOException; 
import java.io.UnsupportedEncodingException; 
import java.security.*; 

/** 
* Created by IntelliJ IDEA. 
* User: Family 
* Date: 1/21/12 
* Time: 11:20 PM 
* To change this template use File | Settings | File Templates. 
*/ 

public class AES128 { 
    private final String characterEncoding = "UTF-8"; 
    private final String cipherTransformation = "AES/CBC/PKCS7Padding"; 
    private final String aesEncryptionAlgorithm = "AES"; 

public byte[] decrypt(byte[] cipherText, byte[] key, byte [] initialVector) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException 
{ 
    Cipher cipher = Cipher.getInstance(cipherTransformation); 
    SecretKeySpec secretKeySpecy = new SecretKeySpec(key, aesEncryptionAlgorithm); 
    IvParameterSpec ivParameterSpec = new IvParameterSpec(initialVector); 
    cipher.init(Cipher.DECRYPT_MODE, secretKeySpecy, ivParameterSpec); 
    cipherText = cipher.doFinal(cipherText); 
    return cipherText; 
} 

public byte[] encrypt(byte[] plainText, byte[] key, byte [] initialVector) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException 
{ 
    Cipher cipher = Cipher.getInstance(cipherTransformation); 
    SecretKeySpec secretKeySpec = new SecretKeySpec(key, aesEncryptionAlgorithm); 
    IvParameterSpec ivParameterSpec = new IvParameterSpec(initialVector); 
    cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); 
    plainText = cipher.doFinal(plainText); 
    return plainText; 
} 

private byte[] getKeyBytes(String key) throws UnsupportedEncodingException { 
    byte[] keyBytes= new byte[16]; 
    byte[] parameterKeyBytes= key.getBytes(characterEncoding); 
    System.arraycopy(parameterKeyBytes, 0, keyBytes, 0, Math.min(parameterKeyBytes.length, keyBytes.length)); 
    return keyBytes; 
} 

/// <summary> 
/// Encrypts plaintext using AES 128bit key and a Chain Block Cipher and returns a base64 encoded string 
/// </summary> 
/// <param name="plainText">Plain text to encrypt</param> 
/// <param name="key">Secret key</param> 
/// <returns>Base64 encoded string</returns> 
public String encrypt(String plainText, String key) throws UnsupportedEncodingException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException{ 
    byte[] plainTextbytes = plainText.getBytes(characterEncoding); 
    byte[] keyBytes = getKeyBytes(key); 
    return Base64.encodeToString(encrypt(plainTextbytes, keyBytes, keyBytes), Base64.DEFAULT); 
} 

/// <summary> 
/// Decrypts a base64 encoded string using the given key (AES 128bit key and a Chain Block Cipher) 
/// </summary> 
/// <param name="encryptedText">Base64 Encoded String</param> 
/// <param name="key">Secret Key</param> 
/// <returns>Decrypted String</returns> 
public String decrypt(String encryptedText, String key) throws KeyException, GeneralSecurityException, GeneralSecurityException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException, IOException { 
    byte[] cipheredBytes = Base64.decode(encryptedText, Base64.DEFAULT); 
    byte[] keyBytes = getKeyBytes(key); 
    return new String(decrypt(cipheredBytes, keyBytes, keyBytes), characterEncoding); 
} 
+1

ログキャッチエラーメッセージ。 – kosa

答えて

0

私はこの質問がかなり古くなっていることを知りました。私はそれに直面しました。しかし、その解決策はかなり単純です。同じ問題を抱えている他の人の回答を投稿したかっただけです。

あなたはAndroid 2.2に付属のandroid.util.Base64を使用しています。 Android 2.1以下でBase64エンコーダ/デコーダをダウンロードする必要があります。

関連する問題