有关AES_CBC加密算法,C与JAVA调用OPENSSL开发库接口参数的问题

最近用c开发一个项目里面涉及到AES_CBC加解密算法。其直接调用openssl库中的aes的AES_cbc_encrypt进行加解密。

C开发的客户端与服务端能正常相互加解密。最近公司要求用JAVA开发客户端。

网上找到调用的例子:

IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));

SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");

最后JAVA上送的密文C能解析,而C上送的密文JAVA不能解析。经过多方面的调试最后发现两种使用的填充方式不一样导致。

JAVA使用的PKCS5PADDING填充方式。查询相关网站得知PKCS5PADDING的意义。

算法/模式/填充                16字节加密后数据长度        不满16字节加密后长度
AES/CBC/NoPadding                   16                          不支持
AES/CBC/PKCS5Padding            32                          16
AES/CBC/ISO10126Padding        32                          16
AES/CFB/NoPadding                    16                          原始数据长度
AES/CFB/PKCS5Padding             32                          16
AES/CFB/ISO10126Padding        32                          16
AES/ECB/NoPadding                   16                          不支持
AES/ECB/PKCS5Padding            32                          16
AES/ECB/ISO10126Padding        32                          16
AES/OFB/NoPadding                   16                          原始数据长度
AES/OFB/PKCS5Padding            32                          16
AES/OFB/ISO10126Padding        32                          16
AES/PCBC/NoPadding                 16                          不支持
AES/PCBC/PKCS5Padding          32                          16
AES/PCBC/ISO10126Padding      32                          16

JAVA使用的方式得出的密文长度为32位。而C调用的接口得出的密文长度为16位。

则需要将JAVA的填充方式设置为NoPadding即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值