だから私は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 の倍数でなければなりません
私は何を間違っていますか?