java结合android和ios的三端非对称接口加密讲解

简介:   算法:有rsa及aes算法  Java端处理方式:  入参处理方式  1、参数通过request.getParameter获取的话,可以通过自己定义一个filter来进行处理。  定义两个类,分别继承HttpServletRequestWrapper及Filter,将该filter配置到web.xml里面,在其他filter前面,以免影响程序获取参数的调用  public class SafeTextRequestWrapper extends HttpServletRequestWrapper {  public SafeTextRequestWrapper(H

  算法:有rsa及aes算法

  Java端处理方式:

  入参处理方式

  1、参数通过request.getParameter获取的话,可以通过自己定义一个filter来进行处理。

  定义两个类,分别继承HttpServletRequestWrapper及Filter,将该filter配置到web.xml里面,在其他filter前面,以免影响程序获取参数的调用

  public class SafeTextRequestWrapper extends HttpServletRequestWrapper {

  public SafeTextRequestWrapper(HttpServletRequest req) {

  super(req);

  }

  @Override

  public Map getParameterMap() {

  Map paramMap=super.getParameterMap();

  for (String[] values : paramMap.values()) {

  for (int i=0; i < values.length; i++) {

  values[i]=SensitiveUtil.filter(values[i]);

  }

  }

  return paramMap ;

  }

  @Override

  public String getParameter(String name) {

  //这里就是对request请求获取的参数进行解密

  return SensitiveUtil.filter(super.getParameter(name));

  }

  }

  public class SafeTextFilter implements Filter {

  @Override

  public void init(FilterConfig filterConfig) throws ServletException {

  }

  @Override

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

  SafeTextRequestWrapper safeTextRequestWrapper=new SafeTextRequestWrapper((HttpServletRequest) request);

  chain.doFilter(safeTextRequestWrapper, response);

  }

  @Override

  public void destroy() {

  }

  }

  2、参数如果是调用接口的入参,那么可以通过aop的around注解的方式进行处理

  @Around("webLog()")

  public Object aroundMethod(ProceedingJoinPoint pjd) {

  Object result=null;

  HttpServletRequest request=((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

  Object[] args=pjd.getArgs(); // 获取目标对象方法参数

  if (args.length > 0) {

  //对入参进行解密,这块主要是针对方法里面的参数处理的

  for (int i=0; i < args.length; i++) {

  if (args[i] instanceof String) {

  try {

  args[i]=AES.decrypt(args[i].toString(), key);

  } catch (Exception e) { // 使用异常机制来验证 log.error("SystemLogs解密参数错误" + args[i], e);

  }

  }

  }

  }

  try {

  // 记录方法开始执行时间

  long startTime=System.currentTimeMillis();

  result=pjd.proceed(args);

  // 记录方法结束执行时间,及写入到数据库

  long E_time=System.currentTimeMillis() - startTime;

  String methodName=pjd.getSignature().getDeclaringTypeName() + "." + pjd.getSignature().getName() + "()";

  //将方法的执行时间记入到数据库

  logsService.saveSysLogs(request, E_time + "ms");

  // 对结果进行加密处理

  Map map=new HashMap();

  map.put("result", AES.encrypt(JSON.toJSONString(result), key));

  map.put("end","ok");

  return map;

  } catch (Throwable throwable) {

  log.error(throwable.toString());

  }

  return result;

  }

  Java加解密方案到此为止

  -----------------------------------------------------------------------

  Ios加解密方案:

  加密流程:

  APP:代码随机生成16位字符串的key,用这个二手游戏转让平台key对加密内容进行AES加密

  把随机生成的16位key用RSA公钥加密

  把加密的key 和 加密的内容两个部分 传到后台

  后台Java:

  收到两个部分的东西,一个是加密的key,一个是加密的内容

  用RSA私钥解密key,得到key

  用key解密用AES加密的内容,得到请求的信息

  操作流程:

  通过OpenSSL生成私钥和公钥

  根据生成的公钥找到公钥字符串

  #define pubkey @"-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwgsVWu7N9gpH4/V65WjiU+D0KkLE94uOmaChU/waE1LvOOOl4jzvbeXtFzILsbAaeZnT6xR/M7LEV3Kx8YyQk1/IhxR8D8jG64p6Y5gaQlji2QkG6qBrvXN8zhqb4qhEGsVmVAnEhJnICF2Z9pdfak/yE8IV4hOd7aXywNHkOT1PVVsUM8PMXdWa2tSJIGGleRhNilH2pI780enBJGOiLiZj4j6BZZhpfht8a7QV2Vxb6SiIthdOCeWeCmGXQvekmJNlbxDybA6kqH6qfL/Y/vk2xeRLxPYx6WQIDAQAB-----END PUBLIC KEY-----"

  1、 首先随机生成16位字符串,作为AES加密的key

  NSString *key=[SecurityUtil randomlyGenerated16BitString];

  2、 用AES的KEY 加密传输内容

  NSString * encryptString=[SecurityUtil encryptAESData:paramstring withKey:key];

  3、 用RSA加密 AES的key

  NSString * encWithPubKey=[RSA encryptString:key publicKey:pubkey];

  4、 把加密的key 和 加密的内容发给后台服务器

  [dic setObject: encryptString forKey:@"parameters"];

  [dic setObject:encWithPubKey forKey:@"key"];

  Android加解密方案:

  1、 加载公钥

  String public Key="DvhHR9zS3n91VP9uG7Nv08S2uFipntadwdeILsbAaeZnT6xR/M7LEV3Kx8YyQk1/IhxR8D8jG64p6Y5gaQlji2QkG6qBrvXN8zhqb4qhEGsVmVAnEhJnICF2Z9pdfak/yE8IV4hOd7aXywNHkOT1PVVsUM8PMXdWa2tSJIGGleRhNilH2pI780enBJGOiLiZj4j6BZZhpfht8a7QV2Vxb6SiIthdOCeWeCmGXQvekmJNlbxDybA6kqH6qfL/Y/vk2xeRLxPYx6WQIDAQAB";

  2、 生成一个16位随机字符串作为AES的key

  strRand="" ;

  for(int i=0;i<16;i++){

  strRand +=String.valueOf((int)(Math.random() * 10)) ;

  }

  3、 用AES 加密内容

  String encryptContent=AESOperator.encrypt(content, strRand);

  4、 用RSA公钥对key加密

  String key=RSAUtils.encryptData(strRand);

  5、 用key对AES解密

  String decrypt=AESOperator.decrypt(content, strRand);

目录
相关文章
|
4月前
|
安全 数据挖掘 Android开发
Cellebrite UFED 4PC 7.72 (Windows) - Android 和 iOS 移动设备取证软件
Cellebrite UFED 4PC 7.72 (Windows) - Android 和 iOS 移动设备取证软件
284 2
Cellebrite UFED 4PC 7.72 (Windows) - Android 和 iOS 移动设备取证软件
|
10月前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
370 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
6月前
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
489 5
|
10月前
|
安全 Android开发 数据安全/隐私保护
Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
497 12
Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
|
10月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
417 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
10月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
482 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
10月前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
1355 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
10月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
1266 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
12月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
1235 11