> 加密算法总结
> 银联支付
> 支付宝:要求需要公司账号
> 微信支付:微信更新测试服务器,Demo,丢失聊天记录(安全码策略:keystore)
> 扩展:混合开发(android+H5,通信三种方式)
* 1.js主动调用android
* 2.android主动调用js
* 3.js callback回调式调用android
### 01.数字签名应用实战-签名
> 对登录信息(用户名、密码、时间戳 签名)
InputStream ins = null;
String usrename = "heima104";
String password = "123456";
System.out.println(System.currentTimeMillis());
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("username="+usrename)
.append("&password="+MD5Utils.md5(password))
.append("×tamp="+System.currentTimeMillis());
String input = stringBuilder.toString();
String sign = SignatureUtils.sign(input);
try {
String url = "http://120.77.241.119/EncryptServer/login_v5?"+input+"&sign="+sign;
URL url2 = new URL(url);
HttpURLConnection conn = (HttpURLConnection) url2.openConnection();
System.out.println(url2.toURI().toString());
ins = conn.getInputStream();
String result = IoUtils.convertStreamToString(ins);
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
} finally {
IoUtils.close(ins);
}
### 02.数字签名应用实战-避免抓包
> 对提交参数md5:如果用户没有登录过,存储到数据库;如果登录过不让登录,该url已经失效
String url = "http://120.77.241.119/EncryptServer/login_v6?"+input+"&sign="+sign;
URL url2 = new URL(url);
String md5 = MD5Utils.md5(input+"&sign="+sign);
System.out.println(md5);
HttpURLConnection conn = (HttpURLConnection) url2.openConnection();
System.out.println(url2.toURI().toString());
ins = conn.getInputStream();
String result = IoUtils.convertStreamToString(ins);
> 手机验证码
### 03.加密算法总结
> 对称加密(DES、AES):
* 1.优先使用DES,如果提高安全度使用AES
* 2.可逆:开发中只要可逆都可以选择对称加密,缓存联系人信息
> 非对称RSA
* 1.可逆:公钥加密私钥解密;私钥加密公钥解密
* 2.秘钥对:公钥和私钥,不能手动指定,必须由系统生成
* 3.加密速度慢:不能加密大文件
* 4.分段加密:每次最大加密长度117字节
* 5.分段解密:每次最大解密长度128字节
* 应用场景:一般很少使用RSA加密和解密,用的最多的是它的数字签名
> 消息摘要:
* md5:16个字节,转成16进制32个字节
* sha1:20个字节,转成16进制40个字节
* sha256:32个字节,转成16进制64个字节
* 应用:md5使用最多