3Des加密
1.编码方式的统一
统一使用utf-8编码方式
2.Base64的encode和decode
为防止3des加密后产生的乱码问题,加密后的数据都得用Base64.encode()一下,相应的解密的时候,应将拿到的加密后的数据源进行Base64.decode()一下,再进行3des解密
3. 3des的加密、解密模式的统一
3des有两种工作模式
CBC (key,iv, data)
ECB (key , data)
4.补码方式的统一(padding)
Cipher cipher = Cipher.getInstance("desede" + "/ECB/PKCS5Padding");
5.“+”号与空格的问题
php服务器端加密后的数据是"F6AZJnQKKYE+ettC5edUbned+HVsD/76"
但是android端拿到后的数据是 "F6AZJnQKKYE ettC5edUbned HVsD/76"导致无法进行解密
可以发现相应的“+”号都被转换成了空格,这是什么问题?
为防止中文乱码问题,android对进行post请求后的数据进行了如下操作
URLEncoder.decode(字符串);
经试验发现,此方法会将“+”转换成空格,将空格转换成“+”
所以php端进行返回数据的时候应该对应的进行URLEncoder.encode(字符串)
对于无中文乱码产生的地方也可以去掉URLEncode.decode(字符串)
RSA加密
1.too much data for RSA block问题
RSA是常用的非对称加密算法。这实际上是因为待加密的数据超长所致。
RSA 所能加密的数据的长度取决于key 的长度,公式如下:
数据长度 = key的长度/8 - 11
比如key的长度为512
那么能加密的数据长度最大为 512/8-11 = 53位,也就是要加密的字符串长度必须小于等于53
2.php端生成的公钥格式为pem格式
-----BEGIN PUBLIC KEY-----
Pub-key
-----END PUBLIC KEY-----
Android端使用的时候应该除去前后缀再使用
相应的,Php端拿到android端的pub-key,应该添加前后缀再使用
3.本地保存key,取出后缺少换行的问题
为了持久保存server端的pub-key,将拿到后的pub-key通过I/O流存储到文件中。
当下次使用的时候,用流读取,生成pub-key 。这有过程可能因为缺少换行出错,应该注意。
转载于:https://blog.51cto.com/vincenttung/1295063