java客户端与服务器信息加密,Java AES加密 - 在客户端和服务器之间发送初始化向量...

我在客户端生成初始化向量,其中消息被加密,然后与解密向量一起发送到服务器。Java AES加密 - 在客户端和服务器之间发送初始化向量

客户端代码:

String key1 = "1234567812345678";

byte[] key2 = key1.getBytes();

SecretKeySpec secret = new SecretKeySpec(key2, "AES");

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

cipher.init(Cipher.ENCRYPT_MODE, secret);

byte[] encrypted = cipher.doFinal(msg.getBytes(StandardCharsets.UTF_8));

byte[] iv = cipher.getIV();

String text = DatatypeConverter.printBase64Binary(encrypted);

System.out.println("Encrypted info: " + text);

bytebuf = ByteBuffer.allocate(1024);

bytebuf.clear();

// send iv

bytebuf.put(iv);

bytebuf.flip();

while(bytebuf.hasRemaining()) {

nBytes += client.write(bytebuf);

System.out.println("Iv sent!");

}

bytebuf.clear();

bytebuf.put(text.getBytes());

bytebuf.flip();

while(bytebuf.hasRemaining()) {

nBytes += client.write(bytebuf);

}

服务器代码

LOGGER.info("Confirming write");

byte[] iv = buf.array();

LOGGER.info("Data packet found as {}", iv);

LOGGER.info("Confirming write");

String data = new String(buf.array());

LOGGER.info("Data packet found as {}", data);

IvParameterSpec ivspec = new IvParameterSpec(iv);

String key1 = "1234567812345678";

byte[] key2 = key1.getBytes();

SecretKeySpec secret = new SecretKeySpec(key2, "AES");

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

cipher.init(Cipher.DECRYPT_MODE, secret, ivspec);

byte[] encrypted = DatatypeConverter.parseBase64Binary(data);

byte[] decrypted = cipher.doFinal(encrypted);

System.out.println("Decrypted Info: " + new String(decrypted, StandardCharsets.UTF_8));

我得到以下异常:

java.security.InvalidAlgorithmParameterException: Wrong IV length: must be 16 bytes long

看来,如果我分配例如1024个字节Ť ○缓冲液,32字节大小的[]被发送到服务器,而是一个1024字节大小的[]将在服务器上生成:

Data packet found as [-55, 119, 34, -19, -33, -20, -67, -77, 54, -111, 14, 94, 73, 98, 34, -7, 0, 0, 0, 0, 0, 0,..................

我是否连上了正确的道路?

+0

发现了问题,我将编辑回答解决方案 –

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32-串口发送数据-过程与配置

串口发送过程配置流程 HAL库中串口寄存器定义文件: stm32f429xx.h F429芯片 stm32f767xx.h F767芯片 stm32f103xx.h F103芯片 stm32fnnnx.x.h 其他芯片 可以在其中找到USART_TypeDef:最终会映射到寄存器的地址。 typedef struct {__IO uint32_t CR1;…

STM32 串口接收流程-串口接收中断

串口接收 串口接收流程 编程USARTx_CR1的M位来定义字长。编程USARTx_CR2的STOP位来定义停止位位数。编程USARTx_BRR寄存器确定波特率。使能USARTx_CR1的UE位使能USARTx。如果进行多缓冲通信,配置USARTx_CR3的DMA使能(DMAT)。使能USARTx_CR1的RE位为1使…

STM32-串口接收、发送数据实验-程序代码分析

串口通信实验 Printf支持 printf向串口发送一些字符串数据。如果使用串口2,可以修改while((USART1->SR&0X40)0);和USART1->DR (u8) ch; 中的USART1为USART2. //加入以下代码,支持printf函数,而不需要选择use MicroLIB #if 1 #pragma import(__use_…

STM32-外部中断配置-外部中断实验

STM32-外部中断原理与配置 IO口外部中断原理概述 STM32控制器支持的外部中断/事件请求 中断线M3M4M7EXTI线0~15:对应外部IO口的输入中断。√√√EXTI线16:连接到PVD输出。√√√EXTI线17:连接到RTC闹钟事件。√√√EXTI线18:连接到USB OTG…

STM32-独立看门狗原理-实验

独立看门狗原理概述 为什么要看门狗: 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继…

STM32-窗口看门狗-工作过程-配置-实验

窗口看门狗 窗口看门狗概述 之所以称为窗口就是因为其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。 而独立看门狗限制喂狗时间在0-x内…

python 列表、元组、集合、字典、循环遍历数据结构

python 列表、元组、集合、字典、数据结构的循环(整理自python文档)列表-list-用方括号标注,逗号分隔的一组值list 的 方法对list添加、插入、删除、查找、排列、翻转list.append(x)list.extend(iterable)list.insert(i, x)list.remove(x)lis…

音频和视频的基础知识

目录PCM-脉冲编码调制录音的原理记录声音-音频数字化音频数字化-PCM采样采样采样率采样定理量化位深度编码声道(Channel)比特率信噪比编码(Encode)解码(Decode)常见的音频编码和文件格式无损Monkeys AudioF…

神经网络算法-论证单层感知器的局限性

神经网络算法-论证单层感知器的局限性 今天课上学习了一个思路 将真值表转换到平面直角坐标系中 来论证线性可分还是不可分,挺有意思记录一下。 简单感知器模型实际上仍然是MP模型的结构,但是它通过采用监督学习来逐步增强模式划分的能力,达…

python 通过pip安装库 pycharm里面使用第三方库

安装所需的模块(python) pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。 首先命令行输入pip3 --version查看是否有pip C:\Users\jym>pip3 --version pip 19.2.3 from d:\program files\python38\l…

python threading-单线程 多线程 主线程 子线程 setDeamon join

python threading-单线程 多线程 主线程 子线程 setDeamon join单线程多线程主线程和子线程setDaemon()join()测试多线程下程序运行的时间创建多个线程优化子线程单线程 用单线程 ,做听音乐和看电影两件事儿,首先排一下顺序。 import timedef music():…

python 解决bytes和str之间 出现 TypeError的问题

解决TypeError: can only concatenate str (not “bytes”) to str 错误提示: pic_content pic_contentf.read() TypeError: can only concatenate str (not “bytes”) to str 首先来看代码: text_content HTTP/1.x 200 OK Content-Type: text/h…

python 实现TCP socket通信和 HTTP服务器、服务器和客户端通信python实例

python 实现TCP socket通信和 HTTP服务器、服务器和客户端通信实例socket是什么?服务器和客户端通信的流程python 实现TCP socket通信例子关于Host和PORT的设置socket函数socket编程思路基于TCP socket的HTTP服务器分析HTTP服务器代码服务器的response文本客户端的r…

判断ROS版本号-ubuntu20.04安装ROS_noetic-修改镜像源

判断ROS版本号-ROS安装-修改镜像源 linux版本:ubuntu20.04 ROS版本:noetic判断ROS版本号安装ROS改镜像源判断ROS版本号 机器人用的是树莓派、stm32、ros。 首先要配置网络,把机器人上的sd卡插到树莓派开发板上,然后配置连接的热点。 接下来&#xff0…

ROS基本概念 文件系统 创建ROS软件包 ROS中的一些命令

ROS基本概念 文件系统 创建ROS软件包 ROS中的一些命令ROS是什么ROS文件系统文件系统工具:rospack、roscd、rosls创建ROS 软件包catkin是什么创建和构建一个catkin工作空间:catkin软件包的结构catkin工作空间中存放软件包的结构创建catkin软件包-catkin_c…

ubuntu 中 ROS 一些报错的解决

1. Unable to load type jymubuntu:~/catkin_ws$ rosservice args /add_two_ints ERROR: Unable to load type [beginner_tutorials/AddTwoInts]. Have you typed make in [beginner_tutorials]?由于当前使用的终端的工作环境没有更新导致无法找到自定义的消息。使用下面的命…

ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点(python版本)

ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点-python版本rosedmsg和srv创建msg使用rosmsg创建srv使用rossrv重新make一下软件包编写发布者节点发布者节点代码解析编写订阅者节点订阅者节点代码解析构建节点运行发布者和订阅者节点编写服务节点编写客户端节…

从空间中理解线性代数

线性代数-从空间中理解总结向量线性组合空间的基 Basis张成的空间 Span线性相关和线性无关向量空间的一组基变换线性变换数值描述线性变换复合变换行列式矩阵的用途线性方程组逆矩阵列空间零空间秩非方阵基变换基变换矩阵特征向量 特征值特征基关于坐标总结 空间中不共线的两个…

Win10 和 Ubuntu 20.04 安装 face_recognition 和 dlib

face_recognition是一个人脸识别库。 WIN10安装: 首先改一下下载源: 1.C:\Users\xx\pip,新建文件pip.ini 2.文件里面输入: [global] index-url https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-hostmirrors.ali…

python 视频和图片转换 视频压缩 图片降低分辨率 图像处理

python 做视频后期单个视频转图片所有图片转视频视频压缩 - ffmpeg图片降低分辨率图像处理这是最近无聊的想法,对视频进行处理,其实也就是对图片的处理。 对视频进行后期处理,思路就是,视频转图片,然后对图片进行处理…