[英]Base64 and mcrypt_encrypt in android
我需要在Android中使用密鑰加密某些文本。 在PHP中,加密代碼如下所示
$this->securekey = hash('sha256',$textkey,TRUE);
$this->iv = mcrypt_create_iv(32, MCRYPT_DEV_URANDOM);
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->securekey, $input, MCRYPT_MODE_ECB, $this->iv));
對於Base64,我為我的Android應用程序在Netbeans中添加了來自apache.org(commons-codec-1.6.jar)的通用編解碼器。 代碼沒有錯誤。 但是,當我運行該應用程序並調用使用編解碼器的函數時,該應用程序停止並且需要先關閉。
在logCat中說:
Android Runtime: java.lang.NoSuchMethodError:
org.apache.commons.codec.binary.Base64.decodeBase64
這是我的代碼:
public static String crypt(String input, String key){
byte[] crypted = null;
try{
SecretKeySpec skey = new SecretKeySpec(org.apache.commons.codec.binary.Base64.decodeBase64(key), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skey);
crypted = cipher.doFinal(input.getBytes());
}catch(Exception e){
}
return org.apache.commons.codec.binary.Base64.encodeBase64String(crypted);
}
我不確定我的代碼是否與PHP代碼進行相同的加密。 我在Android和PHP之間找到了此鏈接http://www.androidsnippets.com/encrypt-decrypt-between-android-and-php ,但它不使用Base64,僅用於mcrypt_encrypt。 誰能幫助我獲得與PHP服務器相同的加密。
提前致謝。
您的錯誤僅是因為您忘記將Apache編解碼器庫添加到運行時環境。 僅僅針對它進行編譯是不夠的。 該庫需要實際存在於Android設備上。
您無法使用默認的Java庫在Android上獲得相同的加密,您可能需要Bouncy Castle庫。 您的示例中的PHP代碼使用Rijndael,其塊大小為32字節。 AES是Rijndael的子集,塊大小為16個字節。 這在PHP mcrypt中稱為MCRYPT_RIJNDAEL_128
。
其他一些實現細節:
input.getBytes()
是不可移植的,它使用平台默認編碼,該編碼可能與PHP編碼不同; 最后是一些安全警告:
MCRYPT_DEV_URANDOM
是不安全的(這基本上意味着PHP加密是毫無價值的,最好使用PHP openssl包裝器); 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.