数据安全之对称加密(九)- 数据填充实现

news2024/10/7 8:25:08

AES 是一种采用分组加密方法的算法。待加密的明文首先被分割成若干固定大小的块,每个块大小通常是128位。接着,这些块逐一被加密,转换成对应的密文块。这种处理方式确保了加密的一致性和效率,同时也方便了对数据的管理和加密处理。

在实际应用中,要加密的数据长度可能不总是刚好符合块大小的要求。这时,“PKCS5Padding”就发挥了作用,它是一种常用的数据填充模式,用于处理这种长度上的不匹配问题。具体来说,如果一个数据块缺少若干字节才能达到所需的块大小,PKCS5Padding会添加相应数量的填充字节,每个填充字节的值等于缺少的字节数。例如,如果一个块缺少5个字节,则会添加5个值为0x05的字节来填充这个块。

如果明文数据的长度恰好是128位的整数倍,即不需要任何填充来达到块大小,PKCS5Padding会添加一个完整的128位的新块作为填充。这个新块中的每个字节都会被设置为16(即十六进制的0x10)。这样做是为了在解密时能够明确区分数据内容和填充内容,从而确保数据的准确恢复。

JDK 对这一部分的实现代码在 com.sun.crypto.provider.CipherCore 类 prepareInputBuffer 方法中,首先计算 padding 的数值。

int paddingLen = 0;
// will the total input length be a multiple of blockSize?
if (unitBytes != blockSize) {
    if (totalLen < diffBlocksize) {
        paddingLen = diffBlocksize - totalLen;
    } else {
        paddingLen = blockSize -
            ((totalLen - diffBlocksize) % blockSize);
    }
} else if (padding != null) {
    paddingLen = padding.padLength(totalLen);
}

然后使用 com.sun.crypto.provider.PKCS5Padding 类的 padWithLen 方法进行填充。

byte paddingOctet = (byte) (len & 0xff);
Arrays.fill(in, off, idx, paddingOctet);

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

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

相关文章

从物联网看智慧文旅的未来:技术与实践的完美结合,重塑旅游体验的新篇章

一、物联网技术&#xff1a;智慧文旅的基石 随着科技的飞速发展&#xff0c;物联网技术已经深入到我们生活的方方面面&#xff0c;尤其在智慧文旅领域&#xff0c;物联网技术更是起到了不可或缺的作用。它如同智慧文旅的基石&#xff0c;为旅游行业带来了前所未有的创新和变革…

基于Java SSM框架实现大学生社团管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现大学生社团管理系统演示 摘要 在网络迅速发展的时代&#xff0c;众多的软件被开发出来&#xff0c;给社团带来了很大的选择余地&#xff0c;而且学生越来越追求更个性的需求。在这种时代背景下&#xff0c;社团只能以学生为导向&#xff0c;按学生所需要…

AMEYA360--思瑞浦推出16通道高精度ADC—TPAFE51760

聚焦高性能模拟芯片和嵌入式处理器研发的半导体公司——思瑞浦推出全新16通道高精度ADC——TPAFE51760。 TPAFE51760内置高精度基准&#xff0c;工作温度支持-40C to 125C&#xff0c;产品广泛应用于电力自动化领域中的DTU、FTU、MU等装置。 TPAFE51760产品优势 业界领先的30V模…

成本更低、更可控,云原生可观测新计费模式正式上线

云布道师 在上云开始使用云产品过程中&#xff0c;企业一定遇见过两件“讨厌”事&#xff1a; 难以理解的复杂计费逻辑&#xff0c;时常冒出“这也能收费”的感叹&#xff1b; 某个配置参数调节之后&#xff0c;云产品使用成本不可预估的暴涨。 可观测作为企业 IT 运维必须品…

Redis系列-数据结构篇

数据结构 string&#xff08;字符串&#xff09; redis的字符串是动态字符串&#xff0c;类似于ArrayList&#xff0c;采用预分配冗余空间的方式减少内存的频繁分配。 struct SDS<T>{ T capacity; T len; byte flags; byte[] content; } 当字符串比较短时&#xff0c…

在 Vue 项目中,可以通过设置不同的环境变量来区分不同的环境,例如本地开发环境、测试环境和生产环境。以下是设置环境变量的步骤:

1、在src下新建三个文件夹 &#xff08;.env.local、.env.test 和 .env.prod&#xff09; 2、配置信息 .env.local VUE_APP_ENVlocal VUE_APP_API_URLhttp://localhost:8080.env.test VUE_APP_ENVtest VUE_APP_API_URLhttp://124.220.110.203:9090/ .env.prod VUE_APP_…

直播主播产品转场话术

主播产品转场话术 一、预告下一环节 亲爱的观众朋友们&#xff0c;非常感谢大家对我们直播间的关注与支持!现在&#xff0c;我们即将进入下一个环节&#xff0c;这个环节将为您带来更多惊喜!请耐心等待&#xff0c;不要离开哦! 二、解释过渡 感谢大家对我们产品的喜爱与支持…

循环测试之旅——深度解析Pytest插件 pytest-repeat

在软件开发中,测试的重要性不言而喻。而为了提高测试的鲁棒性和可靠性,Pytest插件 pytest-repeat 应运而生。这个插件可以帮助你轻松实现测试用例的循环运行,以更全面地评估代码的稳定性。本文将深入介绍 pytest-repeat 插件的基本用法和实际案例,助你更好地利用循环测试,…

JavaSE基础详细总结

JavaSE基础总结 目录 初始Java数据类型和变量运算符逻辑控制方法数组类和对象继承和多态抽象类和接口String异常 1、初始java Java之父——詹姆斯.高斯林 Java语言的命名&#xff08;爪哇岛。盛产咖啡&#xff09;和咖啡图标都反映了詹姆斯。高斯林热爱咖啡。 1、“一次编…

SpringBoot高级原理

SpringBoot高级原理 今日内容&#xff1a; 理解SpringBoot自动化配置源码理解SpringBoot健康监控 1 SpringBoot自动化配置原理 01-SpringBoot2高级-starter依赖管理机制 目的&#xff1a;通过依赖能了解SpringBoot管理了哪些starter 讲解&#xff1a; 通过依赖 spring-bo…

外汇天眼:新坦利斯曼黄金矿业的前首席执行官承认违反新西兰金融市场法

新西兰金融市场管理局&#xff08;FMA&#xff09;今天确认&#xff0c;新西兰证券交易所上市公司新坦利斯曼黄金矿业有限公司的前首席执行官Matthew Geoffrey Hill承认违反了2013年《金融市场行为法》&#xff08;FMCA&#xff09;&#xff0c;在此法案下作出了虚假和误导性陈…

Linux本地部署SVN服务结合内网穿透实现远程访问

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

【wink】如何导出Live实况?

1.首页点击「转Live实况」&#xff0c;即可将图片或视频快速转为Live实况格式。 2.编辑后的视频&#xff0c;可在保存分享页点击「存为Live实况」。&#xff08;本功能仅限iOS用户使用&#xff09;

【每日一题】4.LeetCode——杨辉三角

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢迎各位大佬指点&…

佩戴口罩监测识别摄像机

佩戴口罩监测识别摄像机是一种基于计算机视觉技术的智能监测设备&#xff0c;它能够快速准确地识别出人们是否佩戴口罩&#xff0c;并对佩戴口罩的人员进行识别和记录。这种摄像机在当前抗击病毒的背景下具有重要意义&#xff0c;在公共场所、医疗机构、交通枢纽等地方都有着广…

Gradle学习笔记:Gradle的使用方法

文章目录 1.初始化项目2.构建脚本语言选择3.项目命名4.项目构建过程 1.初始化项目 创建一个test空文件夹&#xff0c;在该文件夹下打开终端&#xff0c;并执行命令&#xff1a;gradle init. 会有一个选项让你选择项目的类型。下面是每个选项的含义和用途&#xff1a; basic&am…

cg插画设计行业怎么样,如何学习插画设计

插画设计行业是一个充满创意和艺术性的行业&#xff0c;随着数字化时代的不断发展&#xff0c;cg插画的应用范围越来越广泛&#xff0c;市场需求也在逐年增长。以下是一些关于acg插画设计行业的现状和发展趋势&#xff1a; 市场需求不断增长&#xff1a;随着广告、媒体、影视、…

图像读写(imgcodecs 模块)与视频读写

内置格式 OpenCV 可以在没有任何第三方库帮助的情况下读取以下格式&#xff1a; BMP的 高动态范围 (WITH_IMGCODEC_HDR) 太阳栅格 (WITH_IMGCODEC_SUNRASTER) PPM、PGM、PBM、PFM&#xff08;、WITH_IMGCODEC_PXMWITH_IMGCODEC_PFM) PNG、JPEG、TIFF、WEBP 支持 格式选择…

C语言第九弹---二维数组

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 二维数组 1、二维数组的创建 1.1、二维数组的概念 ​1.2、⼆维数组的创建 2、二维数组的初始化 2.1、不完全初始化 ​2.2、完全初始化 ​2.3、按照行初始化 ​2.4、…

C++实用教程(四):面向对象核心多态 笔记

推荐B站视频&#xff1a;C现代实用教程(四):面向对象核心多态_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV15v4y1M7fF/?spm_id_from333.999.0.0&vd_sourcea934d7fc6f47698a29dac90a922ba5a3 本项目通用的tasks.json文件和launch.json tasks.json {"versi…