Qt利用AES加密数据发送给springboot(java)服务器解密

背景

目前用Qt和同事(他做服务器端)做一个第三方账号登录的东西:
用户在本地客户端输入账号和密码后,客户端将密码进行对称加密,将数据post给服务器。
服务器接收到数据之后,对密码进行解密,得到明文,然后用该账号+密码进行第三方平台登录。

问题(重点、难点)

无论是DES还是AES,不同的平台下,或者不同的人所实现的库一般很难对接上。尤其是那个DES,有一堆可自定义的初始化数据,一旦有一个参数没对上,那就差之千里了。

解决方案

java使用Hutool
Qt使用QtAes

java那边官方好像有自带的加解密函数库,第三方也很多(好像也是对官方的封装)。目前同事用的Hutool,挺好用的。

import cn.hutool.core.util.HexUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
import cn.hutool.crypto.symmetric.DES;
import cn.hutool.crypto.Mode;

...
{
        // 测试用的密钥,貌似要长度固定24,不然出问题
        String key = "abcdefghijklmnop78945612";

//        DES myCrypto = new DES(key.getBytes());
//        DES myDes = new DES(
//                Mode.ECB,
//                Padding.PKCS5Padding,
//                key.getBytes()
//        );

        AES myCrypto = new AES(key.getBytes());
//        AES myCrypto = new AES(
//                Mode.ECB,
//                Padding.PKCS5Padding,
//                key.getBytes()
//        );

        byte[] enData = myCrypto.encrypt("12345678abcdef");

        String hexStr = HexUtil.encodeHexStr(enData);

        System.out.println(hexStr);

        hexStr = "0f5cba12ce291aeb42e12ffda5e08f441c0f896ba2de8791074fd9a50e1746a0";
        byte[] hexData = HexUtil.decodeHex(hexStr);
        byte[] deData =  myCrypto.decrypt(hexData);

        String deStr = new String(deData, "utf-8");

        System.out.println(deStr);
}

Qt这边使用之前找到的那个库QtAes就行,但是要注意一下参数。下面的代码展示了具体的参数设置:

#include "QtAes/src/qaesencryption.h" //这个要看你具体放在哪个路径

...

    // 这里的参数是经过我测试的,其余参数各位有空也可以配合后端一个个试一下。
    QAESEncryption encryption(QAESEncryption::AES_192, QAESEncryption::ECB, QAESEncryption::PKCS7);
    QByteArray enData = encryption.encode("12345678abcdef中文文本", "abcdefghijklmnop78945612"); //和服务器用同一个密钥
    QString passwordData = enData.toHex();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值