帮忙看个 PHP 和 Java 关于 AES-128-CBC 加解密的代码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
brader
V2EX    程序员

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

  •  
  •   brader 2023-05-25 11:58:28 +08:00 2095 次点击
    这是一个创建于 875 天前的主题,其中的信息可能已经有所发展或是发生改变。
    PHP 做 AES 加密,想用 https://phpseclib.com/docs/java 这个包,这文档里面给了一段各语言 java 解密代码示例

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

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

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

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

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

    https://qy.baidu.com/doc/index.html#/inner_serverapi/appendix
    sincus
        14
    sincus  
       2023-05-25 16:27:30 +08:00
    @brader 确实,我也看不到图
    YepTen
        15
    YepTen  
       2023-05-25 17:34:22 +08:00
    Java Security Standard Algorithm Names
    中对加密的填充模式只有以下几种:
    NoPadding
    ISO10126Padding
    OAEPPadding, OAEPWith<digest>And<mgf>Padding
    PKCS1Padding
    PKCS5Padding
    SSL3Padding
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5129 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 09:17 PVG 17:17 LAX 02:17 JFK 05:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86