墨香年少 32 发布于 3月4日 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。 目之所及,皆是回忆,心之所想,皆是过往 分享这篇帖子 链接帖子 分享到其他站点