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

C++-openssl-aes-cbc-pkcs5

PKCS#5填充是PKCS#7填充的一个子集,在PKCS#7填充时BlockSize为8的时候,PKCS#5与PKCS#7填充是一样的,在BlockSize不同时PKCS#5与PKCS#7填充是不同的。
PKCS#5填充是将数据填充到8的倍数,
填充后数据长度的计算公式:
定于元数据长度为x,
填充后的长度是 x + (8 - (x % 8)),
填充的数据是 8 - (x % 8)

示例:
1byte
  数据数 0x41
    填充前:0x41
    填充后:0x410x070x070x070x070x070x070x07

2byte
  数据数 0x41
    填充前:0x410x41
    填充后:0x410x410x060x060x060x060x060x06

3byte
  数据数 0x41
  填充前:0x410x410x41
  填充后:0x410x410x410x050x050x050x050x05

4byte
  数据数 0x41
  填充前:0x410x410x410x41
   填充后:0x410x410x410x410x040x040x040x04

5byte
  数据数 0x41
  填充前:0x410x410x410x410x41
   填充后:0x410x410x410x410x410x030x030x03

6byte
   数据数 0x41
   填充前:0x410x410x410x410x410x41
   填充后:0x410x410x410x410x410x410x020x02

7byte
   数据数 0x41
   填充前:0x410x410x410x410x410x410x41
   填充后:0x410x410x410x410x410x410x410x01

8byte
 数据数 0x41
 填充前:0x410x410x410x410x410x410x410x41
  填充后:0x410x410x410x410x410x410x410x410x080x080x080x080x080x080x080x08


以下是c++代码

unsigned char* test_pkcs5padding(unsigned char* in,  int m_BlockSize)
{int inlen = strlen((char*)in);            //1.获取输入长度int outlen = inlen + (8 - (inlen % 8));   //2.计算输出长度unsigned char* out = new unsigned char[outlen];          //3.创建输出bufmemcpy(out, in, inlen);                   //4.out for (int i = inlen; i < outlen; i++)      //5.填充out 中剩余的位数{int paddingval = (outlen - (inlen % 8));out[i] = paddingval;}return out;
}

     test_main()
{int m_BlockSize = 8;unsigned char in[]="A";unsigned char *out=NULL;out=test_pkcs5padding(in, 8);unsigned char in2[] ="AA";out=test_pkcs5padding(in2,8);unsigned char in3[] = "AAA";out = test_pkcs5padding(in3,8);unsigned char in8[] = "AAAAAAAA";out = test_pkcs5padding(in8, 8);}


 

public byte[] pkcs5_padding(byte[] source) {int sourceLength = source.length;int paddingLength = sourceLength  + (8- (sourceLength % 8));byte[] paddingResult = new byte[paddingLength];System.arrayCopy(source, 0, paddingResult, 0, sourceLength);for (int i = sourceLength; i < paddingLength; i++) {paddingResult[i] = (byte)(paddingLength - (sourceLength % 8);}return paddingResult;}

相关文章:

C++-openssl-aes-cbc-pkcs5

PKCS#5填充是PKCS#7填充的一个子集&#xff0c;在PKCS#7填充时BlockSize为8的时候&#xff0c;PKCS#5与PKCS#7填充是一样的&#xff0c;在BlockSize不同时PKCS#5与PKCS#7填充是不同的。 PKCS#5填充是将数据填充到8的倍数&#xff0c; 填充后数据长度的计算公式&#xff1a; 定于…...

一个进程最多可以创建多少个线程基本分析

前言 ​话不多说&#xff0c;先来张脑图~ linux 虚拟内存知识回顾 虚拟内存空间长啥样 在 Linux 操作系统中&#xff0c;虚拟地址空间的内部又被分为内核空间和用户空间两部分&#xff0c;不同位数的系统&#xff0c;地址空间的范围也不同。比如最常见的 32 位和 64 位系统&…...

Swin Transformer V2 Scaling Up Capacity and Resolution(CVPR2022)

文章目录 AbstractIntroduction不稳定性问题下游任务需要的高分辨率问题解决内存问题- Related WorksLanguage networks and scaling upVision networks and scaling upTransferring across window / kernel resolution Swin Transformer V2Swin Transformer简介Scaling Up Mod…...

rust学习——字符串、字符串字面量、切片(slice)、字符串 slice

文章目录 字符串、字符串字面量、切片&#xff08;slice&#xff09;、字符串 slice01、字符串02、字符串字面量03、切片 &#xff08;slice&#xff09;04、字符串 slice 字符串 slice注意要点String 与 &str 的转换字符串深度剖析字符串 slice 作为函数参数例子001例子00…...

SolidWorks模型导入到Gazebo中

首先建立好solidworks模型&#xff0c;然后另存为stl格式&#xff0c; 导出为STL文件时&#xff0c;文件名最好不要是中文&#xff0c;并且要将后缀STL改为stl&#xff0c;否则Gazebo无法识别 这是我创建好的机器人充电桩模型&#xff1a; 尺寸是单位是mm&#xff1a; 135mm …...

使用CMake构建一个简单的C++项目

文章目录 一. 构建一个简单的项目二. 构建过程1. 创建程序源文件2. 编写CMakeList.txt文件3. 构建项目并编译源代码 附件 一. 构建一个简单的项目 最基本的CMake项目是从单个源代码文件构建的可执行文件。对于像这样的简单项目&#xff0c;只需要一个包含三个命令的CMakeLists…...

图论06-【无权无向】-图的遍历并查集Union Find-力扣695为例

文章目录 1. 代码仓库2. 思路2.1 UF变量设计2.2 UF合并两个集合2.3 查找当前顶点的父节点 find(element) 3. 完整代码 1. 代码仓库 https://github.com/Chufeng-Jiang/Graph-Theory 2. 思路 2.1 UF变量设计 parent数组保存着每个节点所指向的父节点的索引&#xff0c;初始值为…...

什么是卷积神经网络?解决了什么问题?

什么是卷积神经网络&#xff1f; 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种深度神经网络模型&#xff0c;主要用于图像识别、语音识别和自然语言处理等任务。它通过卷积层、池化层和全连接层来实现特征提取和分类。 解决了什么问…...

Golang数组:全面指南与实际示例

揭示Golang数组的威力&#xff1a;从基础到高级技巧 Golang数组是数据存储的基本构建块&#xff0c;为开发人员提供了多种可能性。在这篇正式的博客文章中&#xff0c;我们将探讨Golang数组&#xff0c;从基础知识到高级技巧。通过实际示例和正式的语气&#xff0c;我们将揭示…...

程序连接oracle查询数据的环境配置

连接oracle 数据库真麻烦&#xff0c;还是MySQL方便 Oracle Instant Client 这个东西的版本跟oracle的版本是有讲究的&#xff0c;引用文档的说明 Oracle 标准的客户端-服务器网络互操作性允许不同版本的 Oracle 客户端和 Oracle 数据库之间的连接。有关经过认证的配置&#…...

【BIGRU预测】基于双向门控循环单元的多变量时间序列预测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

RDD算子操作(基本算子和常见算子)

目录 一、基本算子 1.map算子 2.flatMap算子 3.filter算子 4.foreach算子 5.saveAsTextFile算子 6.redueceByKey算子 二、常用Transformation算子 1.mapValues算子 2.groupBy算子 3.distinct算子 4.union算子 5.join算子 6.intersection算子 7.glom算子 8.groupByKey算…...

互联网Java工程师面试题·Java 面试篇·第五弹

目录 79、适配器模式和装饰器模式有什么区别&#xff1f; 80、适配器模式和代理模式之前有什么不同&#xff1f; 81、什么是模板方法模式&#xff1f; 82、什么时候使用访问者模式&#xff1f; 83、什么时候使用组合模式&#xff1f; 84、继承和组合之间有什么不同&#…...

常见的测试理论面试问题

请解释软件生存周期是什么&#xff1f; 软件生存周期是指从软件开发到维护的过程&#xff0c;包括可行性研究、需求分析、软件设计、编码、测试、发布和维护等活动。这个过程也被称为“生命周期模型”。 软件测试的目的是什么&#xff1f; 软件测试的目的是发现软件中的错误…...

把JS中的map方法玩出花来

一 map是什么 map(callbackFn) map(callbackFn, thisArg)map() 方法是一个迭代方法。它为数组中的每个元素调用一次提供的 callbackFn 函数&#xff0c;并用结果构建一个新数组。 参数 callbackFn 数组中的每个元素执行的函数。它的返回值作为一个元素被添加为新数组中。该…...

液晶显示计算器(延时程序)

#include "delay.h" /*------------------------------------------------ uS延时函数&#xff0c;含有输入参数 unsigned char t&#xff0c;无返回值 unsigned char 是定义无符号字符变量&#xff0c;其值的范围是 0~255 这里使用晶振12M&#xff0c;精确延时请…...

线性代数2:梯队矩阵形式

图片来自 Europeana on Unsplash 一、前言 欢迎阅读的系列文章的第二篇文章&#xff0c;内容是线性代数的基础知识&#xff0c;线性代数是机器学习背后的基础数学。在我之前的文章中&#xff0c;我介绍了线性方程和系统、矩阵符号和行缩减运算。本文将介绍梯队矩阵形式&#xf…...

【JavaEE】网络编程(网络编程基础、Socket套接字)

一、网络编程基础 1.1、什么是网络编程&#xff1f; 网络编程&#xff0c;指网络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的方式实现网络通信&#xff08;或称为网络数据传输&#xff09; 注意&#xff1a;我们只要满足进程不同就行&#xff1b;所以即便是同一…...

Node学习笔记之模块化

一、介绍 1.1 什么是模块化与模块 ? 将一个复杂的程序文件依据一定规则&#xff08;规范&#xff09;拆分成多个文件的过程称之为 模块化 其中拆分出的 每个文件就是一个模块 &#xff0c;模块的内部数据是私有的&#xff0c;不过模块可以暴露内部数据以便其他 模块使用 1…...

用matlab求解线性规划

文章目录 1、用单纯形表求解线性规划绘制单纯形表求解&#xff1a; 2、用matlab求解线性规划——linprog()函数问题&#xff1a;补充代码&#xff1a;显示出完整的影子价格向量 1、用单纯形表求解线性规划 求解线性规划 m i n − 3 x 1 − 4 x 2 x 3 min -3x_1-4x_2x_3 min−…...

5秒获取百度网盘提取码:智能解析工具的技术架构与实战指南

5秒获取百度网盘提取码&#xff1a;智能解析工具的技术架构与实战指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey baidupankey作为专业的百度网盘提取码智能获取工具&#xff0c;通过创新的技术架构解决了用户在访问加密分…...

社会韧性正在被AIAgent悄悄稀释?SITS2026压力测试揭示4类隐性系统性风险

第一章&#xff1a;SITS2026压力测试框架与AIAgent社会影响评估范式 2026奇点智能技术大会(https://ml-summit.org) SITS2026&#xff08;Scalable Intelligent Testing Suite 2026&#xff09;是一套面向大规模多模态AI Agent集群的开源压力测试框架&#xff0c;专为验证系统…...

私有化AI视频助手搭建实录:当Ollama遇上OpenClaw

AI视频生成的热度仍在攀升&#xff0c;从HappyHorse-1.0匿名屠榜到各家模型竞相开源&#xff0c;创作者似乎迎来了最好的时代。但一个现实问题始终悬而未决&#xff1a;云端服务固然方便&#xff0c;可谁愿意把未公开的脚本、商业素材甚至客户数据&#xff0c;毫无保留地交给一…...

利用node.forge.js实现前端数据加密传输的最佳实践

1. 为什么前端需要数据加密传输&#xff1f; 在Web开发中&#xff0c;前端与后端的数据交互往往涉及敏感信息&#xff0c;比如用户密码、身份证号、银行卡信息等。这些数据如果以明文形式传输&#xff0c;很容易被中间人攻击&#xff08;MITM&#xff09;截获。想象一下&#x…...

用Python的SciPy和Matplotlib搞定旋转体体积计算:从圆盘法到壳层法的保姆级教程

用Python的SciPy和Matplotlib搞定旋转体体积计算&#xff1a;从圆盘法到壳层法的保姆级教程 记得第一次在工程计算中遇到旋转体体积问题时&#xff0c;我盯着那堆积分公式发呆了半小时——直到发现Python可以把这个抽象问题变成直观的3D可视化。本文将带你用SciPy和Matplotlib&…...

基于PointNet++的3D点云分割与体积计算实战指南

1. 为什么选择PointNet处理3D点云 在计算机视觉领域&#xff0c;3D点云处理一直是个棘手的问题。传统的卷积神经网络&#xff08;CNN&#xff09;擅长处理规则网格数据&#xff08;比如2D图像&#xff09;&#xff0c;但面对无序、稀疏的点云数据时就显得力不从心。我最早接触这…...

在Ascend NPU上构建并运行onnxruntime的实战指南

1. 为什么要在Ascend NPU上运行onnxruntime&#xff1f; 最近几年国产AI加速硬件发展迅猛&#xff0c;Ascend NPU凭借出色的算力和能效比&#xff0c;在推理场景中表现亮眼。但很多开发者手上积累了大量ONNX格式的模型&#xff0c;直接迁移到新硬件平台总会遇到各种兼容性问题。…...

GTE中文-large应用案例:在线教育题库自动标签与知识点关联

GTE中文-large应用案例&#xff1a;在线教育题库自动标签与知识点关联 1. 项目概述 GTE文本向量-中文-通用领域-large是一个基于深度学习的多任务自然语言处理模型&#xff0c;专门针对中文文本理解进行了优化训练。这个模型在教育领域具有重要的应用价值&#xff0c;特别是在…...

如何利用Stateflow与函数调用撕裂模块,在Simulink中构建多周期任务调度系统?

1. 多周期任务调度系统的核心挑战 在嵌入式系统开发中&#xff0c;资源受限的环境常常需要精细的任务调度策略。想象一下你正在设计一个智能家居控制器&#xff0c;需要同时处理以下任务&#xff1a;每10ms读取传感器数据&#xff08;高实时性&#xff09;、每100ms更新设备状态…...

量化投资实战:揭秘阿尔法因子构建的五大关键步骤与优化策略

1. 阿尔法因子构建的完整流程 量化投资的核心在于寻找能够持续产生超额收益的阿尔法因子。很多刚入门的量化研究员常常陷入一个误区&#xff1a;拿到数据就直接开始构建因子。实际上&#xff0c;一个完整的因子构建流程应该像建造房子一样&#xff0c;从打地基开始一步步来。 我…...