所以我有一个android应用程序和一个用python编写的googleappengine服务器。 android应用程序需要向服务器发送一些合理的信息,我的方法是通过httppost。在
现在我一直在考虑在发送数据之前在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;
}
这就是我试图在服务器上解密的方法(我还不知道如何加密..也许你们也能帮上忙)
^{pr2}$当我查看日志时,我得到的字符串测试是:xVF79DzOplxBTMCwAx+hoeDJhyhifPZEoACQJcFhrXA=
,因为它不是16的倍数(idk why,我想这是因为java加密)我得到了错误
ValueError:输入字符串长度必须是16的倍数
我做错什么了?在
为什么不使用ssl(又名https)?这将提供所有加密所需的安全和私人传输数据之间的手机和应用引擎。在
它的基本原理是:将数据发送到https://yourapp.appspot.com/,而不是发送给http://yourapp.appspot.com/。在
为了在App Engine和Android之间建立一个完整的安全且经过身份验证的通道,您可以使用Google云端点。它甚至会生成Android端的代码来调用它。在
爪哇语:
Python:
对于较长的节目和讲述,请检查IO 13通话:https://www.youtube.com/watch?v=v5u_Owtbfew
此字符串“xvf79dzopxbtmcwax+hoeDJhyhifPZEoACQJcFhrXA=”是一个base64编码值。在
https://en.wikipedia.org/wiki/Base64
Base64编码被广泛应用于许多应用中,它是将二进制数据编码成文本的一种好方法。如果您看到的是一个长编码值,末尾的“=”可以很好地指示base64编码。在
在python代码中,在将数据交给解密函数之前,可能需要对数据进行base64解码。在
我有两个建议:
如果加密对您来说不是一个舒适的地方,请咨询在这方面对您的项目很在行的人。
请注意,在您分发的Android应用程序中嵌入对称加密密钥是个坏主意。任何能得到你的应用程序副本的人都可以提取该密钥并用它来解密或欺骗你的消息。
相关问题 更多 >
编程相关推荐