• 安全机制(security) - 加解密算法 - 填充规则


    说明

    • 对称加解密算法是分组运算,运算时需要将数据按固定长度分组,由于明文不一定是指定大小的整数倍,因此需要将明文的最后一个分组填充至加密算法所要求的分组大小后进行运算。
    • 随着加解密算法的发展,出现了多种填充规则。
    • 填充规则是对称加密分组加密算法的通用机制,一种算法可能支持多种填充规则,例如:AES算法。

    填充规则

    PKCS5/PKCS5Padding

    • 将原始数据长度(字节数)填充到8的倍数,填充字节数据是 8 - (x % 8),x是原始数据长度。
    原始数据:FF FF FF FF  
    填充后数据:FF FF FF FF 04 04 04 04
    
    • 1
    • 2

    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
    
    • 1
    • 2
    • 3

    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
    
    • 1
    • 2

    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 表示任意数据
    
    • 1
    • 2
    • 3

    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
    
    • 1
    • 2

    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
    
    • 1
    • 2

    注意

    1. 明文size是单组size的倍数的情况,也需要对明文进行填充。
    • 目的是方便统一处理,算法处理的数据一定是填充后的。
    • 避免一些特殊情况,例如明文恰好是:FF FF FF FF FF FF FF FF FF FF 06 06 06 06 06 06,
      加密算法无法区分后面的6个06是明文,还是填充的数据。
    1. 解密时,需要根据加密时使用的填充规则,将填充数据剔除。
  • 相关阅读:
    torch函数学习
    移除数组中指定元素的所有数
    机械专有名词
    mac m1 配置goland debbug
    python爬虫实战——抖音
    nginx 获取客户端真实IP
    使用 SAP UI5 sap.ui.export.Spreadsheet API 进行 Excel 导出的一些限制
    手把手教会你 | 多用户-服务器聊天室应用软件开发
    OpenCV4(C++)—— 直方图
    SpringBoot 接口数据加解密
  • 原文地址:https://blog.csdn.net/qazw9600/article/details/128154942