1

だから私はAndroidアプリとPythonで書かれたGoogleアプリエンジンサーバーを持っています。Android アプリは、適切な情報をサーバーに送信する必要があります。その方法は、http 投稿を行うことです。

今、私はデータを送信する前にAndroidで暗号化し、gaeサーバー上で復号化することを考えています。

これは、Javaで暗号化および復号化する方法です:

private static final String ALGO = "AES";



public static String encrypt(String Data) throws Exception {
        Key key = generateKey();
        Cipher c = Cipher.getInstance(ALGO);
        c.init(Cipher.ENCRYPT_MODE, key);
        byte[] encVal = c.doFinal(Data.getBytes());
     //   String encryptedValue = new BASE64Encoder().encode(encVal);

        byte[] decoded = Base64.encodeBase64(encVal);

        return (new String(decoded, "UTF-8") + "\n");
    }

public static String decrypt(String encryptedData) throws Exception {
        Key key = generateKey();
        Cipher c = Cipher.getInstance(ALGO);
        c.init(Cipher.DECRYPT_MODE, key);
        byte[] decordedValue =Base64.decodeBase64(encryptedData);
        byte[] decValue = c.doFinal(decordedValue);
        String decryptedValue = new String(decValue);

        return decryptedValue;

    }

    private static Key generateKey() throws Exception {
        Key key = new SecretKeySpec(Constant.keyValue, ALGO);
        return key;
    }

そして、これは私がサーバー上で解読しようとする方法です(暗号化の方法はまだわかりません..皆さんもそれを手伝ってくれるかもしれません)

def decrypt(value):
    key = b'1234567891234567'

    cipher = AES.new(key, AES.MODE_ECB)
    msg = cipher.decrypt(value)

    return msg

ログを調べたところ、取得した文字列テストは :xVF79DzOplxBTMCwAx+hoeDJhyhifPZEoACQJcFhrXA=であり、16 の倍数ではないため (これは Java 暗号化が原因だと思います)、エラーが発生します。

ValueError: 入力文字列の長さは 16 の倍数でなければなりません

私は何を間違っていますか?

4

2 に答える 2

2

SSL (別名 https) を使用しないのはなぜですか? これにより、電話と App Engine の間でデータを安全かつ非公開で転送するために必要なすべての暗号化が提供されるはずです。

その基本: データをhttp://yourapp.appspot.com/に送信する代わりに、 https://yourapp.appspot.com/に送信します。

App Engine と Android の間の安全で認証された完全なチャネルとして、Google Cloud Endpoints を使用できます。それを呼び出すための Android 側のコードも生成します。

ジャワ:

パイソン:

より長いショーとテルについては、IO 13 トークをチェックしてください: https://www.youtube.com/watch?v=v5u_Owtbfew

于 2013-06-19T18:22:36.407 に答える