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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:   算法:有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天前
|
数据采集 JSON Java
利用Java获取京东SKU接口指南
本文介绍如何使用Java通过京东API获取商品SKU信息。首先,需注册京东开放平台账号并创建应用以获取AppKey和AppSecret。接着,查阅API文档了解调用方法。明确商品ID后,构建请求参数并通过HTTP客户端发送请求。最后,解析返回的JSON数据提取SKU信息。注意遵守API调用频率限制及数据保护法规。此方法适用于电商平台及其他数据获取场景。
|
7天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
37 6
|
16天前
|
IDE 开发工具 Android开发
移动应用开发之旅:探索Android和iOS平台
在这篇文章中,我们将深入探讨移动应用开发的两个主要平台——Android和iOS。我们将了解它们的操作系统、开发环境和工具,并通过代码示例展示如何在这两个平台上创建一个简单的“Hello World”应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧,帮助你更好地理解和掌握移动应用开发。
40 17
|
16天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
19天前
|
人工智能 安全 物联网
Android与iOS:移动操作系统的双雄争霸
在智能手机市场中,Android和iOS作为两大主流操作系统,各自拥有庞大的用户群体和独特的生态系统。本文将深入探讨这两种系统的发展历程、技术特点、市场表现以及未来趋势,以期为读者提供全面而深入的了解。通过对比分析,我们可以发现,尽管Android和iOS在某些方面存在竞争关系,但它们也在相互借鉴中不断进步和完善。
|
16天前
|
安全 生物认证 Android开发
深入探索iOS与Android操作系统的安全性差异
本文旨在通过对比分析iOS和Android两大主流移动操作系统在安全性方面的差异,揭示它们各自的安全机制、面临的挑战以及用户如何提升自身设备的安全保护。通过对系统架构、应用审核机制、数据加密方式及隐私政策的深入探讨,本文为读者提供了一个全面了解两大平台安全性的视角,并提出了实用的安全建议。
|
20天前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
16天前
|
开发工具 Android开发 iOS开发
Android与iOS生态差异深度剖析:技术架构、开发体验与市场影响####
本文旨在深入探讨Android与iOS两大移动操作系统在技术架构、开发环境及市场表现上的核心差异,为开发者和技术爱好者提供全面的视角。通过对比分析,揭示两者如何塑造了当今多样化的移动应用生态,并对未来发展趋势进行了展望。 ####
|
17天前
|
存储 数据安全/隐私保护 Android开发
Android与iOS的隐私保护机制对比####
本文深入探讨了Android与iOS两大移动操作系统在用户隐私保护方面的策略与技术实现,揭示了两者在设计理念、权限管理、数据加密等方面的差异及其对用户体验的影响。通过对比分析,旨在为用户提供更全面的隐私保护认知,同时为开发者提供跨平台隐私保护的参考。 ####
25 0
|
16天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
下一篇
DataWorks