2012-08-23 4 views
2

비밀 키를 사용하여 특정 텍스트를 안드로이드에서 암호화해야합니다. PHP에서 암호화 코드는 내 안드로이드 응용 프로그램에 대한 넷빈즈에 apache.org (평민 - 코덱 - 1.6.jar)에서 평민 코덱을 추가 Base64로 들어이android의 Base64 및 mcrypt_encrypt

$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)); 

것 같습니다. 코드에 오류가 없습니다. 그러나 응용 프로그램을 실행하고 코덱을 사용하는 함수를 호출하면 응용 프로그램이 중단되고 fore close가 필요합니다. 로그 캣에서

는 말한다 : 나는 내 코드는 PHP 코드와 같은 암호화를 할 경우 확실하지 않다

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); 
     } 

:

Android Runtime: java.lang.NoSuchMethodError: 
org.apache.commons.codec.binary.Base64.decodeBase64 

여기 내 코드입니다. Android와 PHP 사이에이 링크 http://www.androidsnippets.com/encrypt-decrypt-between-android-and-php이 있지만 mcrypt_encrypt에만 Base64는 사용되지 않습니다. 누구든지 PHP 서버와 동일한 암호화를 얻을 수 있도록 도와 줄 수 있습니까? 사전에

감사합니다.

+0

우선, 내 인생이 그것에 의존한다면 암호화 관련 정보에 대해 "android snippets"를 신뢰하지 않을 것입니다. 끔찍한 것들. –

답변

-1

귀하의 런타임 환경에 Apache 코덱 라이브러리를 추가하는 것을 잊었 기 때문에 오류가 발생했습니다. 그것에 대해 컴파일하는 것만으로는 충분하지 않습니다. 라이브러리는 실제로 안드로이드 장치에 현재 있어야합니다.

기본 Java 라이브러리를 사용하여 Android에서 동일한 암호화를받을 수 없으므로 Bouncy Castle 라이브러리가 필요할 수 있습니다. 당신의 예제에서 PHP 코드는 32 바이트의 블록 크기를 가진 Rijndael을 사용합니다. AES는 블록 크기가 16 바이트 인 Rijndael의 하위 집합입니다. 이것은 PHP mcrypt에서 MCRYPT_RIJNDAEL_128으로 알려져 있습니다.

일부 다른 구현 세부 사항 : (뭔가 더 나은하여 기본 mcrypt_encrypt 샘플을 교체 한 지금)는 IV를 사용하지 않는

  • ECB;
  • mcrypt_encrypt는 PKCS5Padding을 수행하지 않습니다. 공백을 사용합니다.
  • input.getBytes()은 이식성이 없으며 플랫폼 기본 인코딩을 사용합니다. 이는 PHP 인코딩과 다를 수 있습니다. 마지막으로

일부 보안 경고 :

  • 단지 SHA가-256 암호에 대한 불안 간주됩니다 사용은 PBKDF2를 사용;
  • ECB는 안전하지 않은 것으로 간주되며 CBC를 사용합니다.
  • MCRYPT_DEV_URANDOM은 안전하지 않습니다 (기본적으로 PHP 암호화는 쓸모가 없습니다. PHP openssl 래퍼를 사용하는 것이 좋습니다).

행운을 빈다.

+0

이 답변이 가브리엘에게 도움이되지 않았습니까? 더 많은 정보가 필요하십니까? –

+0

나는이 대답에 갑자기 -1을 받았습니다. 나는 downvote가 발생하는 이유를 분명히하는 한 downvotes - 내가 동의하지 않는 것조차도 - 상관하지 않습니다. –