Jump to content
Sign in to follow this  
墨香年少

c++利用openssl生成密钥对的代码,并且这个密钥对在php中加密解密的demo代码

Recommended Posts

1. 使用C++和OpenSSL生成密钥对

下面是一个简单的C++示例代码,展示如何使用OpenSSL库生成RSA密钥对,并将其保存到文件中

#include <openssl/pem.h>
#include <openssl/rsa.h>
#include <openssl/evp.h>

int main() {
    int             ret = 0;
    RSA             *r = NULL;
    BIGNUM          *bne = NULL;
    BIO             *bp_public = NULL, *bp_private = NULL;

    int             bits = 2048;
    unsigned long   e = RSA_F4;

    // 1. 生成RSA密钥
    bne = BN_new();
    ret = BN_set_word(bne, e);
    if(ret != 1){
        goto free_all;
    }

    r = RSA_new();
    ret = RSA_generate_key_ex(r, bits, bne, NULL);
    if(ret != 1){
        goto free_all;
    }

    // 2. 保存公钥
    bp_public = BIO_new_file("public.pem", "w+");
    ret = PEM_write_bio_RSAPublicKey(bp_public, r);
    if(ret != 1){
        goto free_all;
    }

    // 3. 保存私钥
    bp_private = BIO_new_file("private.pem", "w+");
    ret = PEM_write_bio_RSAPrivateKey(bp_private, r, NULL, NULL, 0, NULL, NULL);

    // 结束处理
free_all:
    BIO_free_all(bp_public);
    BIO_free_all(bp_private);
    RSA_free(r);
    BN_free(bne);

    return ret == 1;
}

这段代码会生成一对2048位的RSA密钥,并分别保存为public.pem和private.pem文件。

确保您已安装OpenSSL并在编译时链接到OpenSSL库。一个典型的编译命令可能如下:

g++ -o generate_keys generate_keys.cpp -lssl -lcrypto

2. 在PHP中使用密钥对加密和解密

接下来是PHP代码示例,展示如何使用上面生成的密钥对进行加密和解密操作。

<?php
// 加载公钥
$publicKey = file_get_contents('public.pem');
$privateKey = file_get_contents('private.pem');

// 要加密的数据
$data = "Hello, OpenSSL!";

// 使用公钥加密
openssl_public_encrypt($data, $encrypted, $publicKey);

// 加密后的内容通常是乱码,可以进行base64编码
$encrypted = base64_encode($encrypted);
echo "Encrypted: $encrypted\n";

// 使用私钥解密
openssl_private_decrypt(base64_decode($encrypted), $decrypted, $privateKey);
echo "Decrypted: $decrypted\n";
?>

这段PHP代码首先加载了公钥和私钥文件,然后使用公钥加密了一段字符串,最后使用私钥对这段加密的字符串进行了解密。

请确保在运行这些PHP代码之前,你已经运行了C++代码以生成密钥对,并且PHP环境已正确安装且支持OpenSSL。

 

 


目之所及,皆是回忆,心之所想,皆是过往

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

注册必须使用2-8个中文汉字作为账号