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

目录
相关文章
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
792 5
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
2807 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
存储 算法 安全
SpringBoot 接口加密解密实现
【10月更文挑战第18天】
|
算法 安全 Java
即时通讯安全篇(一):正确地理解和使用Android端加密算法
本文主要讨论针对Android这样的移动端应用开发时,如何正确的理解目前常用的加密算法,为诸如即时通讯应用的实战开发,如何在合适的场景下选择适合的算法,提供一些参考。
614 0
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
4763 2
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
1681 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
安全 Java 数据安全/隐私保护
- 代码加密混淆工具-Java 编程安全性
在Java编程领域,保护代码安全与知识产权至关重要。本文探讨了代码加密混淆工具的重要性,并介绍了五款流行工具:ProGuard、DexGuard、Jscrambler、DashO 和 Ipa Guard。这些工具通过压缩、优化、混淆和加密等手段,提升代码安全性,保护知识产权。ProGuard 是开源工具,用于压缩和混淆Java代码;DexGuard 专为Android应用程序设计,提供强大加密功能;Jscrambler 基于云,保护Web和移动应用的JavaScript及HTML5代码;DashO 支持多种Java平台和
988 1
|
JavaScript 数据安全/隐私保护 Python
网易云音乐搜索接口JS逆向: Params、encSecKey加密和AES实战
网易云音乐搜索接口JS逆向: Params、encSecKey加密和AES实战
2210 4
|
安全 算法 Java
java系列之~~网络通信安全 非对称加密算法的介绍说明
这篇文章介绍了非对称加密算法,包括其定义、加密解密过程、数字签名功能,以及与对称加密算法的比较,并解释了非对称加密在网络安全中的应用,特别是在公钥基础设施和信任网络中的重要性。