• 请不要在回答技术问题时复制粘贴 AI 生成的内容
brader
V2EX  ›  程序员

帮忙看个 PHP 和 Java 关于 AES-128-CBC 加解密的代码

  •  
  •   brader · May 25, 2023 · 2477 views
    This topic created in 1111 days ago, the information mentioned may be changed or developed.
    PHP 做 AES 加密,想用 https://phpseclib.com/docs/java 这个包,这文档里面给了一段各语言 java 解密代码示例

    上面 java 示例代码解密使用的填充模式是 PKCS#5

    下面是 PHP 扩展包源码中找到的填充模式源码

    据我观察,这个填充模式应该是 PKCS#7

    我觉得这个网站的示例代码应该是错误的,想给作者提 issue ,因为平时接触 aes 不怎么多,大家帮忙一起看下
    16 replies    2023-05-25 17:35:06 +08:00
    yuzo555
        1
    yuzo555  
       May 25, 2023
    这种 PHP 直接用自带的 openssl 库啊
    brader
        2
    brader  
    OP
       May 25, 2023
    @yuzo555 行是行,不过别人的扩展包,兼容性处理做的比较好,面向对象风格也比较好写
    CodeCodeStudy
        3
    CodeCodeStudy  
       May 25, 2023
    看不到图
    brader
        4
    brader  
    OP
       May 25, 2023
    @CodeCodeStudy 不可能吧,你都能翻到这个网站,imgur.com 上的图片应该看得到呀
    wudicgi
        5
    wudicgi  
       May 25, 2023
    if ($length % $this->block_size == 0) {
    return $text;
    }

    看着不是 PKCS7, PKCS7 任何时候都要加 padding 的
    如果 block_size 是 8 bytes, 那么长度恰好是 8 的整倍数时,要填充 8 个 0x08
    wudicgi
        6
    wudicgi  
       May 25, 2023
    呃,我漏看了 if ($this->padding) { 了
    那看着是 PKCS7
    Great233
        7
    Great233  
       May 25, 2023
    PKCS#5 填充不能用于 AES 加密,看说是 Java 加密库历史遗留问题,所以在使用 AES 加密的时候写的是 PKCS5Padding ,实际是 PKCS7Padding
    > https://crypto.stackexchange.com/a/9044
    brader
        8
    brader  
    OP
       May 25, 2023
    @Great233 按我找到的相关 AES 资料,我的认知也是 PKCS#5 填充不能在 AES 加密的 CBC 模式使用,因为 AES 的 CBC 模式,最短的块长度是 16 ,而 PKCS#5 适用于块长度为 8 。关于 java 方面等问题,我就不是很清楚了,毕竟不是做 java 开发
    wudicgi
        9
    wudicgi  
       May 25, 2023
    PKCS5 和 PCKS7 padding 的区别是它只能用于 block size 为 8 bytes 的情况
    PKCS7 的 block size 可以到 255 bytes
    brader
        10
    brader  
    OP
       May 25, 2023
    @wudicgi 嗯,所以上面代码应该就是使用的 PKCS7 了,因为是动态填充的,那 java 示例应该是有问题的,除非像楼上有个同学说的,java 这样写是历史遗留问题
    CodeCodeStudy
        11
    CodeCodeStudy  
       May 25, 2023
    @brader #4 http 错误为 429 Too Many Requests
    brader
        12
    brader  
    OP
       May 25, 2023
    @CodeCodeStudy 那就不知道为啥你被针对了,大家都看得到,而且这个图床,V2 最多人用的了
    iyaozhen
        13
    iyaozhen  
       May 25, 2023
    看下这个,我很久之前做的,各个语言 AES 加密,重点是能互通的

    https://qy.baidu.com/doc/index.html#/inner_serverapi/appendix
    sincus
        14
    sincus  
       May 25, 2023
    @brader 确实,我也看不到图
    YepTen
        15
    YepTen  
       May 25, 2023
    Java Security Standard Algorithm Names
    中对加密的填充模式只有以下几种:
    NoPadding
    ISO10126Padding
    OAEPPadding, OAEPWith<digest>And<mgf>Padding
    PKCS1Padding
    PKCS5Padding
    SSL3Padding
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3680 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 10:37 · PVG 18:37 · LAX 03:37 · JFK 06:37
    ♥ Do have faith in what you're doing.