Android客户端与服务器端通过DES加密认证
来源:互联网 发布:洛阳软件培训班 编辑:程序博客网 时间:2024/06/06 17:40
由于Android应用没有像web开发中的session机制,所以采用PHPSESSID的方式,是没有办法获取客户端登录状态的。
这种情况下,如何在用户登录后,服务器端获取用户登录状态并保持,就必须采用一种“握手”的方式。
每个手机都有自己的IMEI号,那么能不能通过这个标识去做认证呢?
经过试验,答案是可以!
客户端在请求服务器端的时候,请求参数为 IMEI (param 1)及 IMEI&UA (param 2)经过加密的字符串;服务器端对客户端传递的两个参数进行解密,比对两个IMEI值是否相同。如果相同,返回token给客户端,以后每次客户端请求服务器端的时候,都携带该token。这样服务器就可以获取用户登录状态了。
这里,我采用的DES加密的方式,由于PHP和Java的DES加密是有差异的,所以单独进行处理:
java :
import
java.security.Key;
import
java.security.SecureRandom;
import
java.security.spec.AlgorithmParameterSpec;
import
javax.crypto.Cipher;
import
javax.crypto.SecretKeyFactory;
import
javax.crypto.spec.DESKeySpec;
import
javax.crypto.spec.IvParameterSpec;
import
com.sun.org.apache.xml.internal.security.utils.Base64;
public
class
Des2
{
public
static
final
String ALGORITHM_DES =
"DES/CBC/PKCS5Padding"
;
/**
* DES算法,加密
*
* @param data 待加密字符串
* @param key 加密私钥,长度不能够小于8位
* @return 加密后的字节数组,一般结合Base64编码使用
* @throws CryptException 异常
*/
public
static
String encode(String key,String data)
throws
Exception
{
return
encode(key, data.getBytes());
}
/**
* DES算法,加密
*
* @param data 待加密字符串
* @param key 加密私钥,长度不能够小于8位
* @return 加密后的字节数组,一般结合Base64编码使用
* @throws CryptException 异常
*/
public
static
String encode(String key,
byte
[] data)
throws
Exception
{
try
{
DESKeySpec dks =
new
DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(
"DES"
);
//key的长度不能够小于8位字节
Key secretKey = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
IvParameterSpec iv =
new
IvParameterSpec(
"12345678"
.getBytes());
AlgorithmParameterSpec paramSpec = iv;
cipher.init(Cipher.ENCRYPT_MODE, secretKey,paramSpec);
byte
[] bytes = cipher.doFinal(data);
return
Base64.encode(bytes);
}
catch
(Exception e)
{
throw
new
Exception(e);
}
}
/**
* DES算法,解密
*
* @param data 待解密字符串
* @param key 解密私钥,长度不能够小于8位
* @return 解密后的字节数组
* @throws Exception 异常
*/
public
static
byte
[] decode(String key,
byte
[] data)
throws
Exception
{
try
{
SecureRandom sr =
new
SecureRandom();
DESKeySpec dks =
new
DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(
"DES"
);
//key的长度不能够小于8位字节
Key secretKey = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
IvParameterSpec iv =
new
IvParameterSpec(
"12345678"
.getBytes());
AlgorithmParameterSpec paramSpec = iv;
cipher.init(Cipher.DECRYPT_MODE, secretKey,paramSpec);
return
cipher.doFinal(data);
}
catch
(Exception e)
{
throw
new
Exception(e);
}
}
/**
* 获取编码后的值
* @param key
* @param data
* @return
* @throws Exception
*/
public
static
String decodeValue(String key,String data)
{
byte
[] datas;
String value =
null
;
try
{
if
(System.getProperty(
"os.name"
) !=
null
&& (System.getProperty(
"os.name"
).equalsIgnoreCase(
"sunos"
) || System.getProperty(
"os.name"
).equalsIgnoreCase(
"linux"
)))
{
datas = decode(key, Base64.decode(data));
}
else
{
datas = decode(key, Base64.decode(data));
}
value =
new
String(datas);
}
catch
(Exception e) {
value =
""
;
}
return
value;
}
/**
* test
* @param key : 12345678
*/
public
static
void
main(String[] args)
throws
Exception
{
System.out.println(
"明:cychai ;密:"
+ Des2.encode(
"12345678"
,
"cychai"
));
}
}
0 0
- Android客户端与服务器端通过DES加密认证
- Android客户端与服务器端通过DES加密认证 .
- Android客户端与服务器端通过DES加密认证 .
- Android客户端与服务器端通过DES加密认证
- Android客户端与服务器端通过DES加密认证
- Android客户端与服务器端通过DES加密认证
- Android客户端与服务器端通过DES加密认证
- 【Android】DES加密与解密
- Android客户端与服务器端RSA加密通讯加密字符不一致相关问题
- Android客户端与电脑服务器端
- Android客户端与Servlet通过AES加密通信
- Android客户端与服务器端交换之客户端
- 【Android学习笔记】Android作为客户端与Linux服务器端通过Socket连接
- Android做客户端,PC做服务器端,SSLSocket通信,双向认证
- Android通过get,post方式客户端与服务器端交互实例(慕课网笔记)
- iOS DES加密与3DES加密
- 手机APP和服务器端通信DES加密
- android(客户端)和PC(服务器端)通信RSA 加密解密
- Linux系统裁剪(3)之动态增加Linux模块
- p2p打洞原理
- 算法学习日记
- Flatten Binary Tree to Linked List
- CentOS 6.2编译安装MySQL 5.5.25
- Android客户端与服务器端通过DES加密认证
- ExpandListview应用(实现二级列表和实现新闻分类)
- cookie:记住用户登录时的用户名
- android序列化Serializable、Parcelable(一)
- WCF配置文件详解
- Service的总结及使用技巧(需要注册)
- 多线程AsyncTask中使用Jsoup 报错Caused by: java.lang.NoClassDefFoundError: org.jsoup.Jsoup
- PHP 中session_start函数
- js创建对象