2

秘密鍵を使用して特定のテキストをアンドロイドで暗号化する必要があります。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を見つけましたが、mcrypt_encrypt のためだけに Base64 を使用していません。PHPサーバーと同じ暗号化を取得するのを手伝ってくれる人はいますか?

前もって感謝します。

4

1 に答える 1

0

エラーは、Apacheコーデックライブラリをランタイム環境に追加するのを忘れたためです。それに対してコンパイルするだけでは十分ではありません。ライブラリは実際にAndroidデバイスに存在する必要があります。

デフォルトのJavaライブラリを使用してAndroidで同じ暗号化を取得することはできません。おそらく、BouncyCastleライブラリが必要です。この例のPHPコードは、ブロックサイズが32バイトのRijndaelを使用しています。AESは、ブロックサイズが16バイトのRijndaelのサブセットです。これはMCRYPT_RIJNDAEL_128、PHPmcryptで知られています。

その他の実装の詳細:

  • ECBはIVを使用しません(これまでに、デフォルトのmcrypt_encryptサンプルをより良いものに置き換えました)。
  • mcrypt_encryptはPKCS5Paddingを実行しません、私はそれがスペースを使用すると思います。
  • input.getBytes()移植性がなく、PHPエンコーディングとは異なる可能性のあるプラットフォームのデフォルトエンコーディングを使用します。

最後にいくつかのセキュリティ警告:

  • パスワードにSHA-256を使用するだけでは安全ではないと見なされます。PBKDF2を使用してください。
  • ECBは安全でないと見なされ、CBCを使用します。
  • MCRYPT_DEV_URANDOM安全ではありません(これは基本的にPHP暗号化は無価値であることを意味します。PHPopensslラッパーを使用することをお勧めします)。

幸運を!

于 2012-08-23T17:58:13.790 に答える