• openssl 之RSA加密


    近期项目涉及跟服务器通讯,数据需要加密,就用服务端现有的RSA加密方式(非对称加密方式

    方式一、

        手动编译openssl库然后拿到dll/lib导入然后使用。

    方式二、

                  预编译openssl下载地址

        

    当时楼主使用的版本是这个:winx64 Openssl v1.1.1k  63MB Installer

    安装完成找到目录:

                                 C:Program FilesOpenSSL-Win64includeopenssl 

            libcrypto.lib

            libssl.lib

    两个库文件,具体怎么添加参考我blog里面lib的使用(windows之dll/lib导出)

    配置好环境之后就开始加密了:

    我这里是有服务端的公钥的所有直接配置即可。

    //基于qt,win32更好不用转来转去

    QString HttpFunc::rsaEncryData(const QString& plainText)//公钥加密

    {
      unsigned char encrypted[4098] = {};

      RSA *rsa = NULL;
      BIO *keybio;

      keybio = BIO_new_mem_buf(pubLgoinKey, -1);
      if (!keybio)
        return QString();

      rsa = PEM_read_bio_RSA_PUBKEY(keybio, &rsa, NULL, NULL);
      if(!rsa)
        return QString();

      int encrypted_length = RSA_public_encrypt(plainText.size(), reinterpret_cast<const unsigned char *>(plainText.constData()), encrypted, rsa, RSA_PKCS1_PADDING);

      BIO_free_all(keybio);
      RSA_free(rsa);

      return QString::fromUtf8((char*)encrypted);
    }

    QString HttpFunc::rsaDecryptData(const QString& decryptText)
    {

      unsigned char decrypted[4098] = {};
      RSA *rsa = NULL;
      BIO *keybio;

      keybio = BIO_new_mem_buf("privateKey", -1);//demo这里是私钥解密
      if (!keybio)
        return QString();

      rsa = PEM_read_bio_RSAPrivateKey(keybio, &rsa, NULL, NULL);
      if (!rsa)
        return QString();

      int decrypted_length = RSA_private_decrypt(decryptText.size(), reinterpret_cast<const unsigned char *>(decryptText.constData()), decrypted, rsa, RSA_PKCS1_PADDING);

      BIO_free_all(keybio);
      RSA_free(rsa);

      return QString::fromUtf8((char*)decrypted);
    }

     注意公钥格式

        string pubKey="
    -----BEGIN PUBLIC KEY-----
    
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAptoreKuW1O+Bb1u+O0LQ
    
    NAiaj5i0gbqi5uHCfcTxPIScoeidR/FaPFWpG3mHUCd7SfPKlSQ4H4FGwqkPrAJ8
    
    tb6vfNAY7UPlStaWwCASBBBeHRIFySDIFQnIeXTcZqKgvCAkM3kudyKGMGfZyU6v
    
    SUCMUJbvtIKrSBpPFOaPF1EjfsTpcRjRwNUxjInvxyOmegdLSgg/NNV9AxUSpGX4
    
    Fs5j3W4u4bfgoH6WiI7QLeVWpw+ZcynndtihPa2Y5rKgTDq1IYnniaYy+bTlWMPC
    
    us9AjL0qaM0oXKzUByIeA8cWQR99ewSLsEaa7mhpUZ1jg+fDQEqYfgvenfcOe5bn
    
    NQIDAQAB
    
    -----END PUBLIC KEY-----
    ";

    参考博客:

    https://blog.csdn.net/u011029517/article/details/79392522

    https://blog.csdn.net/weixin_43255133/article/details/82860860

    https://www.cnblogs.com/yuandaozhe/p/10114948.html

     
  • 相关阅读:
    C#学习笔记之——矩形覆盖问题
    链表,栈,队列代码
    链表练习代码
    2012年全国计算机专业大学排名
    寄存器介绍
    win8 wifi开关显示关闭,且设置里面wifi开关显示灰色的解决办法
    360随身wifi无法使用临时解决方案大全
    锐捷客户端的校园网电脑如何转化成无线路由
    未完成数据结构题目
    数据结构代码1
  • 原文地址:https://www.cnblogs.com/liuruoqian/p/15156346.html
Copyright © 2020-2023  润新知