当前位置: 首页 > news >正文

okhttp post请求 header post参数加密遇到的两个问题

如果你对于网络请求用了https后是否还有必要对参数加密有疑问可以看我上篇的文章:网络安全https 记得耐心看完,下面说问题:

  1. Caused by: java.lang.IllegalArgumentException: Unexpected char 0x0a 一开始以为是okhttp框架对特殊字符做了现在,网上其他文章说的是对中文字符,我想我这也没中文啊,但还是全部换成原生试了一下,果然,还是一样报错,坑爹的网友啊,哈哈!
    下面是测试用例demo的代码
package com.tcssj.mbjmb;import android.util.Base64;
import android.view.View;import java.nio.charset.StandardCharsets;import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;public class AESUtil2 {public static byte[] base64ToDecode(String str) {byte[] byteStr = Base64.decode(str, Base64.DEFAULT);return byteStr;}public static String encode(byte[] key) {return Base64.encodeToString(key, Base64.NO_WRAP);}/*** 加密** @param content 需要加密的内容* @param key     加密密码* @return*/public static String encrypt(String content, String key) {return encrypt(content,key.getBytes());}public static String encrypt(String content, byte[] key) {try {//构造密钥SecretKeySpec skey = new SecretKeySpec(key, "utf-8");//创建初始向量iv用于指定密钥偏移量(可自行指定但必须为128位),因为AES是分组加密,下一组的iv就用上一组加密的密文来充当IvParameterSpec iv = new IvParameterSpec(key, 0, 16);//创建AES加密器Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");byte[] byteContent = content.getBytes(StandardCharsets.UTF_8);//使用加密器的加密模式cipher.init(Cipher.ENCRYPT_MODE, skey, iv);// 加密byte[] result = cipher.doFinal(byteContent);//使用BASE64对加密后的二进制数组进行编码return encode(result);} catch (Exception e) {e.printStackTrace();return content;}}/*** 解密* @param content* @param key* @return*/public static String decrypt(String content,  byte[] key) {try {SecretKeySpec skey = new SecretKeySpec(key, "utf-8");IvParameterSpec iv = new IvParameterSpec(key, 0, 16);Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//解密时使用加密器的解密模式// 初始化cipher.init(Cipher.DECRYPT_MODE, skey, iv);byte[] result = cipher.doFinal(base64ToDecode(content));// 解密return new String(result);} catch (Exception e) {return content;}}
}
package com.tcssj.mbjmbimport android.os.Bundle
import android.os.Handler
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.tcssj.mbjmb.ui.theme.MbjmbTheme
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
import okhttp3.Headers
import okhttp3.MediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody
import org.json.JSONObjectclass MainActivity : ComponentActivity() ,test {private  val TAG = "MainActivity"lateinit var  text:Stringoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)runBlocking(Dispatchers.IO) {val okHttpClient=OkHttpClient()
//        val build=okHttpClient.newBuilder()val jsonpost=JSONObject()jsonpost.put("type","text")jsonpost.put("mobile","81991419936")val body=RequestBody.create(MediaType.parse("application/json;charset=utf-8"),AESUtil2.encrypt(jsonpost.toString(),AESUtil2.base64ToDecode("allWUzg1eFJ3ekpNQklUeQ==")))val json=JSONObject()json.put("sourceChannel","Orange")json.put("packageName","com.tcssj.mbjmb")json.put("adid","")json.put("version","12.0.0")json.put("uuId","")json.put("userId","")val request= Request.Builder().url("http://47.101.194.189:10018/auth/v3.1/user/sendVerifiyCode").header("HCFQ",AESUtil2.encrypt(json.toString(), "xDBrgJdnnY2w1Do7Ik6otonXQRgQyt46")).header("packageName","mbjmb").post(body).build()val response= okHttpClient.newCall(request).execute()response.toString()text=AESUtil2.decrypt(response.body().string(), AESUtil2.base64ToDecode("allWUzg1eFJ3ekpNQklUeQ=="))Log.i(TAG, "onCreate: "+AESUtil2.decrypt(text, AESUtil2.base64ToDecode("allWUzg1eFJ3ekpNQklUeQ==")))}setContent {MbjmbTheme {// A surface container using the 'background' color from the themeSurface(modifier = Modifier.fillMaxSize(),color = MaterialTheme.colorScheme.background) {Greeting(name =text)}}}}
}@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {Text(text = "$name!",modifier = modifier)
}@Preview(showBackground = true)
@Composable
fun GreetingPreview() {MbjmbTheme {Greeting("Android")}
}

第一个问题的原因就是我们参数进行加密后有换行符号\n,怎么解决呢?如下图,划线的部分你如果是用的Default,那就会报第一个错误,你需要使用NO_WRAP 不生成换行符的。
在这里插入图片描述
第二个坑就是返回的也是加密后的乱码,你需要拿回来解密的,那你下图中就不能使用body.toString() 方法,要用String()方法。(我是怎么发现的,我用apifox 工具(如果你接口调试还没使用上,拿走不谢,还是要用这么个工具,不然你来来回回启动app调试接口效率很低,但你会懒的使用,抗拒学新的,人吗,天性,但你要克服)调试接口的时候,发现工具和android里面的返回结果不一致)
在这里插入图片描述
因为看下图,如果你用了toString 方法 message当时空的,整个是空的框架,加密的内容okhttp无法转换成它的结构,那你就要用string(),拿到字符串自己解析。
在这里插入图片描述

相关文章:

okhttp post请求 header post参数加密遇到的两个问题

如果你对于网络请求用了https后是否还有必要对参数加密有疑问可以看我上篇的文章:网络安全https 记得耐心看完,下面说问题: Caused by: java.lang.IllegalArgumentException: Unexpected char 0x0a 一开始以为是okhttp框架对特殊字符做了现在…...

什么是Webpack的loader和plugin?它们的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

ESXi for ARM 最新下载地址

由于VMware决定关闭 flings.vmware.com 网站,内容被迁移到不同的地方,网站跳转到 Code Samples and PowerCLI Example Scripts | VMware - VMware {code} ESXi for ARM的下载地址迁移到了 https://customerconnect.vmware.com/downloads/get-download?…...

2. 网络之网络编程

网络编程 文章目录 网络编程1. UDP1.1 DatagramSocket1.1.1 DatagramSocket 构造方法1.1.2 DatagramSocket 方法: 1.2 DatagramPacket1.2.1 DatagramPacket构造方法1.2.2 DaragramPacket方法1.2.3InetSocketAddress API 1.3 UDP回显服务器1.3.1 框架结构1.3.2 读取请…...

工作数字化的中国历程 | 从 OA 到 BPM 到数字流程自动化

业务流程是由“活动”(或称“工作任务”)构成的,在企业里的所有工作是不是都叫流程,或者属于流程的一部分,这个概念很绕,我觉得没有必要去做学究气的辨析。我曾经提出过一个从工作的两个特性(产…...

6-1 二叉排序树查找操作

description 本题要求实现二叉排序树的查找操作。 函数接口定义: BSTree SearchBST(BSTree T,ElemType e); 其中BSTree结构定义如下: typedef int ElemType; typedef struct BSTNode { ElemType data; struct BSTNode *lchild,*rchild; }BSTNode,*BS…...

服务上千家企业,矩阵通2.0重磅上线,全链路管理新媒体矩阵

自上线以来 矩阵通已服务了上千家企业级客户 覆盖汽车、家居、媒体、金融、教育等多个行业 矩阵通1.0时代 我们以“数据”为基座打造出10功能 帮助企业轻松管理新媒体矩阵 实现账号管理、数据分析、竞对监测、 人员考核、风险监管等需求 而现在 矩阵通2.0重磅上线 新增…...

【代码随想录】算法训练计划11

1、20. 有效的括号 题目: 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号…...

Jmeter之JSR223

一、JSR223组件 JSR是Java Specification Requests的缩写,意思是Java规范提案。JSR已成为Java界的一个重要标准. JSR223其实包含了有好几种组件,但是其用法都是一致的,并且都是执行一段代码,主要分类如下: JSR223 PreProcessor JSR223 Timer JSR223 S…...

c++23中的新功能之十八新增的属性

一、c23新的属性 在前面的分析中说过,各种语言的发展整体思路是一致的,即朝着更加实用、简单和更接近自然语言的方向在前进。c23中也在不断的完善和增加相关开发的一些属性和预编译处理指令,这样就可以让开发者在开发的过程中对程序进行控制…...

动手学深度学习:1.线性回归从0开始实现

动手学深度学习:1.线性回归从0开始实现 1.手动构造数据集2.小批量读取数据集3.初始化模型参数4.定义模型和损失函数5.小批量随机梯度下降更新6.训练完整代码 1.手动构造数据集 根据带有噪声的线性模型构造一个人造数据集,任务是使用这个有限样本的数据集…...

【计算机网络】应用层

应用层协议原理 客户-服务器体系结构: 特点:客户之间不能直接通信;服务器具有周知的,固定的地址,该地址称为IP地址。 配备大量主机的数据中心常被用于创建强大的虚拟服务器;P2P体系结构: 特点&…...

python 深度学习 解决遇到的报错问题9

本篇继python 深度学习 解决遇到的报错问题8-CSDN博客 目录 一、can only concatenate str (not "int") to str 二、cant convert np.ndarray of type numpy.object_. The only supported types are: float64, float32, float16, complex64, complex128, int64, in…...

能源管理系统为什么选择零代码开发平台?

市面上有很多能源管理系统,但是零代码开发能源管理系统却非常少。那为什么推荐选择零代码开发平台呢?因为很多企业缺少技术人员,但是却仍然需要数字化工具和流程推进业务和项目,解决能源管理技术人员不懂代码的矛盾问题&#xff0…...

【LeetCode】剑指 Offer Ⅱ 第8章:树(12道题) -- Java Version

题库链接:https://leetcode.cn/problem-list/e8X3pBZi/ 类型题目解决方案二叉树的深搜剑指 Offer II 047. 二叉树剪枝递归(深搜):二叉树的后序遍历 (⭐)剑指 Offer II 048. 序列化和反序列化二叉树递归&…...

利用maven的dependency插件将项目依赖从maven仓库中拷贝到一个指定的位置

https://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html 利用dependency:copy-dependencies可以将项目的依赖从maven仓库中拷贝到一个指定的位置。 使用默认配置拷贝依赖 如果直接执行mvn dependency:copy-dependencies,是将项目…...

在Flask中实现文件上传七牛云中并下载

在Flask中实现文件上传和七牛云集成 文件上传是Web应用中常见的功能之一,而七牛云则提供了强大的云存储服务,使得文件存储和管理变得更加便捷。在本篇博客中,我们将学习如何在Flask应用中实现文件上传,并将上传的文件保存到七牛云…...

【Linux】centOS7安装配置及Linux的常用命令---超详细

一,centOS 1.1 centOS的概念 CentOS(Community Enterprise Operating System)是一个由社区支持的企业级操作系统,它是以Red Hat Enterprise Linux(RHEL)源代码为基础构建的。CentOS提供了一个稳定、可靠且…...

【ES专题】ElasticSearch搜索进阶

目录 前言阅读导航前置知识特别提醒笔记正文一、分词器详解1.1 基本概念1.2 分词发生的时期1.3 分词器的组成1.3.1 切词器&#xff1a;Tokenizer1.3.2 词项过滤器&#xff1a;Token Filter1.3.3 字符过滤器&#xff1a;Character Filter 1.4 倒排索引的数据结构 <font color…...

【iOS免越狱】利用IOS自动化WebDriverAgent实现自动直播间自动输入

1.目标 由于看直播的时候主播叫我发 666&#xff0c;支持他&#xff0c;我肯定支持他呀&#xff0c;就一直发&#xff0c;可是后来发现太浪费时间了&#xff0c;能不能做一个直播间自动发 666 呢&#xff1f;于是就开始下面的操作。 2.操作环境 iPhone一台 WebDriverAgent …...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...