Android之RSA校验
来源:互联网 发布:知乎 未解之谜 编辑:程序博客网 时间:2024/06/09 15:52
android 客户端在与服务器交互时,防止被恶意拦截,恶意返回错误包,需要对数据包进行校验。
大致流程:
1. 客户端请求服务器
2. 服务器响应,准备好需要返回的数据,记为 returnJson
3. 对返回数据进行RSA签名,得到一个签名sign
4. 返回数据,http head部分加入 sign , body 部分加入 returnJson,大概的格式
HTTP/1.1 200 OK...Sign: Sf1uS5fY4a+Z/p9IIX+pP3ZrMSr......LITzL/Hhec={ "code": "OK", "data": { ... } }}
5.客户端收到返回值,取出 sign ,取出 returnJson,校验数据的真实性
其中,RSA 的签名部分由服务器操作,服务器存有私钥,不对外开放,客户端保存公钥
私钥负责签名,公钥负责验证
RSA校验算法:
/** * RSA验签名检查 SHA256 加密 ,数据都需要经过base64解密 * @param content 待签名数据,即服务器的返回数据 * @param sign 签名值,即服务器签名处理后的sign值 * @return 布尔值 */ public static boolean checkSign(String content, String sign){ try { X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.decode(publicKey.getBytes(), Base64.DEFAULT)); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PublicKey publicK = keyFactory.generatePublic(keySpec); Signature signature = Signature.getInstance("SHA256WithRSA"); signature.initVerify(publicK); signature.update(content.getBytes()); return signature.verify(Base64.decode(sign.getBytes(), Base64.DEFAULT)); } catch (Exception e) { e.printStackTrace(); return false; } }
坑就在java 处理publicKey 部分,去掉前后的没用数据,去掉换行符
String errorKey = "-----BEGIN PUBLIC KEY-----\n" + "MIGfMA0GCSqGSIb...\n" + "YG5j6If767Kcmnn...\n" + "zZ0/16W5ngV2az7...\n" + "-----END PUBLIC KEY-----";String rightKey = "MIGfMA0GCSqGSIb..." + "YG5j6If767Kcmnn..." + "zZ0/16W5ngV2az7...";
注:有兴趣的可以看一下 OpenSSL 验证RSA加解密
阅读全文
0 0
- Android之RSA校验
- 【Android数据加密与完整性校验之RSA加密算法】Android应用开发中如何使用RSA加密算法对数据进行校验
- 使用RSA校验签名
- Android之RSA 加密、解密
- android基础学习之RSA加密解密
- Android加密算法之非对称加密RSA
- Android 数据加密之RSA + AES
- Android数据加密之Rsa加密
- Android数据加密之Rsa加密
- Android应用开发中如何使用RSA加密算法对数据进行校验
- Android应用开发中如何使用RSA加密算法对数据进行校验
- Android-NDK-之so文件签名校验
- RSA签名之:RSA加密
- android APK签名过程之CERT.RSA分析
- Android平台下的加密算法之(RSA/DES/AES)
- Android数据加密之RSA+AES混合加密
- Android数据安全之RSA加密(非对称加密)
- Android开发实用工具类之数据校验类
- nginx windows 配置
- LeetCode--Swap Nodes in Pairs
- Kali->arp欺骗
- phpMyAdmin访问被拒绝!
- 考题http://blog.csdn.net/xllily_11/article/details/70899191
- Android之RSA校验
- iscroll实现下拉刷新,上拉加载
- mac自带本地web服务器的使用
- Window10安装VS2013 中文语言包提示程序兼容性已打开,请将其关闭
- 基于线性表的查找法
- 解决百度导航SDK集成的问题
- java高级
- Java包装类 匿名类
- poj 1088-小白算法练习 滑雪 dfs记忆化