密码学 - 加解密算法 - 填充规则
说明
- 分组加密算法运算时需要将数据按固定大小分组,由于明文不一定是指定大小的整数倍,因此需要将明文的最后一个分组填充至加密算法所要求的分组大小后进行运算。
- 随着算法的发展,出现了多种填充规则。
- 填充规则是对称加密分组加密算法的通用机制,一种算法可能支持多种填充规则,例如:AES算法。
填充规则
PKCS5/PKCS5Padding
- 将原始数据长度(字节数)填充到8的倍数,填充字节数据是 8 - (x % 8),x是原始数据长度。
原始数据:FF FF FF FF
填充后数据:FF FF FF FF 04 04 04 04
PKCS7/PKCS7Padding
- 假设数据长度需要填充n(n>0)个字节才对齐,那么填充n个字节,每个字节都是n;如果数据本身就已经对齐了,则填充一块长度为块大小的数据,每个字节都是块大小。
- PKCS5以8字节为单元,而PKCS7支持1-255之间任意字节长度为单元,PKCS7是兼容PKCS5的,PKCS5是PKCS7的一个子集。
- SM4,AES等大部分算法 分组长度固定为128 Bits,因此采用的是该填充规则。
block size为16字节时:
原始数据: FF FF FF FF FF FF FF FF FF FF
填充后数据: FF FF FF FF FF FF FF FF FF FF 06 06 06 06 06 06
ZeroBytePadding/ZeroPadding
- 使用数据0进行填充,填充至符合块大小的整数倍。
原始数据:FF FF FF FF FF FF FF FF FF
填充后数据:FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00
ISO10126PADDING
- 填充至符合块大小的整数倍,填充的最后一个字节为填充的数量数,其他字节随机处理。
原始数据:FF FF FF FF FF FF FF FF FF
填充后数据:FF FF FF FF FF FF FF FF FF xx xx xx xx xx xx 07
xx 表示任意数据
ISO7816-4PADDING
- 填充至符合块大小的整数倍,填充的第一个字节为 0x80,其他字节填 0。
原始数据:FF FF FF FF FF FF FF FF FF
填充后数据:FF FF FF FF FF FF FF FF FF 80 00 00 00 00 00 00
X923PADDING
- 填充至符合块大小的整数倍,填充值最后一个字节为填充的数量数,其他字节填 0。
原始数据:FF FF FF FF FF FF FF FF FF
填充后数据:FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 07
注意
- 明文size是单组size的倍数的情况,也需要对明文进行填充。
- 目的是方便统一处理,算法处理的数据一定是填充后的。
- 避免一些特殊情况,例如明文恰好是:FF FF FF FF FF FF FF FF FF FF 06 06 06 06 06 06,
加密算法无法区分后面的6个06是明文,还是填充的数据。
- 解密时,需要根据加密时使用的填充规则,将填充数据剔除。
密码学 - 加解密算法 - 填充规则相关推荐
- kotlin写的加解密算法,包括模式和填充方式
DES加密 DES是一种对称加密(Data Encryption Standard)算法. DES算法一般有两个关键点,第一个是加密算法,第二个是数据补位. 加密算法常见的有ECB模式和CBC模式: ...
- 现代密码学实验2 RC4加/解密算法
赞赏码 & 联系方式 & 个人闲话 [实验名称]RC4加/解密算法 [实验目的] 1.理解流密码的概念及相关结构: 2.理解并能够编写基本的流密码体制: 3.熟练应用一种编程语言实现R ...
- 安全系列(二)-银行加密体系与加解密算法速览
一.银行3级加密体系说明: 转:加密体系介绍(LMK.ZMK.ZAK.ZPK)_炎升的博客-CSDN博客_lmk密钥 二.加解密算法 1.分类说明 其中按国际和国内使用主要分为:通用算法和国密. 通用 ...
- 密码学常用的算法填充模式_密码学的操作模式
密码学常用的算法填充模式 Modes of operation of a block cipher are procedural rules for a generic block cipher. T ...
- Android金融支付常见加解密算法及安全防护
引言 因为本人从事的金融 IC 卡和移动支付相关的开发工作,在日常研发过程中,对 APP 信息安全防护方面尤为重视,所以现总结下金融支付相关的加解密算法以及常见的安全防范措施. Android 端常见 ...
- 加解密算法的概述和总结
加解密算法的概述和总结 一.单向散列算法 也称为Hash(哈希)算法.是一种将任意长度的消息压缩到某一固定长度(消息摘要)的函数(该过程不可逆).Hash函数可用于数字签名.消息的完整性检测.消息起源 ...
- C语言实现TEA系列加解密算法
C语言实现TEA系列加解密算法 TEA加解密 XTEA加解密 XXTEA加解密 TEA加解密 #include <stdio.h> #include <stdint.h>//加 ...
- Enigma加解密算法实现C++
Enigma加解密算法实现C++ 刚刚接触密码学,就打算用C++实现一下Enigma的加解密.加密的思想就是非常经典的多表代换. 德国二战时期的密码系统:亚瑟·谢尔比乌斯 为了战胜enigma,英国在 ...
- CTF常规密码学加解密脚本(python)
常规密码学加解密脚本(python) 文章目录 一.凯撒加解密(python3) 二.base64和base32解密(python2) 三.RC4加解密(python3) 四.差分曼彻斯特解密(pyt ...
最新文章
- 冲刺区块链第一股,也是AI芯片第一股,嘉楠在美提交IPO招股书
- 【spark】SparkSession的API
- mysql 笔试题_MySQL笔试题详解(一)(中等难度)
- opencv学习笔记5:感兴趣区域ROI
- 设计模式之_Iterator_05
- C# 中对象与JSON字符串相互转换的三种方法
- Chipscope信号无法找到的解决方案
- Nagios 安装方法
- SQL Server 2008 SP1
- Tomcat开发技术之与HTTP服务器的集成
- opencv VS C++ 配置
- 本科蓝色学术论文答辩PPT模板
- 收藏这16个顶级思维模型
- 激活Windows Server 2003 2008终端授权服务器
- 搭建NTP服务器 开启身份验证
- excel查重复_中小企业使用ERP管理软件与EXCEL的区别
- linux脚本中的gt,shell中’-gt’与’’的区别
- LINUX Ubuntu 平台上安装PGI的pgf90编译器
- java力矩_机器人单关节力矩控制(前馈+反馈)
- 安卓解析xml格式字符串