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);

目录
相关文章
|
2月前
|
安全 数据挖掘 Android开发
Cellebrite UFED 4PC 7.72 (Windows) - Android 和 iOS 移动设备取证软件
Cellebrite UFED 4PC 7.72 (Windows) - Android 和 iOS 移动设备取证软件
104 2
Cellebrite UFED 4PC 7.72 (Windows) - Android 和 iOS 移动设备取证软件
|
2月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
144 23
|
2月前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。
|
2月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
2月前
|
安全 Java 开发者
Java集合框架:详解Deque接口的栈操作方法全集
理解和掌握这些方法对于实现像浏览器后退功能这样的栈操作来说至关重要,它们能够帮助开发者编写既高效又稳定的应用程序。此外,在多线程环境中想保证线程安全,可以考虑使用ConcurrentLinkedDeque,它是Deque的线程安全版本,尽管它并未直接实现栈操作的方法,但是Deque的接口方法可以相对应地使用。
119 12
|
2月前
|
Java API 网络架构
java调用api接口自动判断节假日信息
java调用api接口自动判断节假日信息
685 0
|
2月前
|
消息中间件 缓存 前端开发
从资损百万到零事故:Java 接口幂等设计的艺术与实践
在分布式系统中,重复请求常引发严重资损,如支付双扣、库存超卖等问题,其根源在于接口缺乏幂等性设计。本文通过真实案例揭示幂等性的重要性,并详解8种主流解决方案,涵盖唯一请求ID、乐观锁、悲观锁、状态机等,帮助开发者构建稳定系统,保障业务一致性。无论你是架构师还是开发工程师,都能从中获得实战指导,有效规避重复调用带来的风险。
142 0
|
Java Android开发 索引
Android插件化开发基础之Java反射机制研究(2)
Android插件化开发基础之Java反射机制研究(2)
178 0
|
13天前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
48 0

热门文章

最新文章