openssl rsa算法demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RSA(Rivest-Shamir-Adleman)算法是一种非对称加密算法,常用于数字签名、密钥交换等方面。OpenSSL是一个常用的开源密码库,支持RSA算法的实现。 以下是使用OpenSSL库进行RSA加密和解密的基本步骤: 1. 生成RSA密钥对 使用OpenSSL库生成RSA密钥对,可使用命令行工具openssl或者编程接口。其中,私钥通常保存在文件中,公钥可以通过私钥推导出来。 2. 加密数据 使用公钥对需要加密的数据进行加密,可使用OpenSSL库提供的函数RSA_public_encrypt。 3. 解密数据 使用私钥对加密后的数据进行解密,可使用OpenSSL库提供的函数RSA_private_decrypt。 以下是一个简单的示例代码: ```c #include <openssl/rsa.h> #include <openssl/pem.h> // 生成RSA密钥对 RSA* generateKeyPair(int keyLength) { RSA* keyPair = RSA_new(); BIGNUM* exponent = BN_new(); BN_set_word(exponent, RSA_F4); RSA_generate_key_ex(keyPair, keyLength, exponent, NULL); BN_free(exponent); return keyPair; } // 加密数据 int encryptData(unsigned char* data, int dataLen, RSA* publicKey, unsigned char* encryptedData) { int encryptedDataLen = RSA_public_encrypt(dataLen, data, encryptedData, publicKey, RSA_PKCS1_PADDING); return encryptedDataLen; } // 解密数据 int decryptData(unsigned char* encryptedData, int encryptedDataLen, RSA* privateKey, unsigned char* decryptedData) { int decryptedDataLen = RSA_private_decrypt(encryptedDataLen, encryptedData, decryptedData, privateKey, RSA_PKCS1_PADDING); return decryptedDataLen; } int main() { RSA* keyPair = generateKeyPair(2048); unsigned char plainText[] = "Hello, RSA!"; unsigned char encryptedData[4096]; unsigned char decryptedData[4096]; int encryptedDataLen = encryptData(plainText, strlen(plainText), keyPair, encryptedData); int decryptedDataLen = decryptData(encryptedData, encryptedDataLen, keyPair, decryptedData); printf("Plain text: %s\n", plainText); printf("Encrypted data: "); for (int i = 0; i < encryptedDataLen; i++) { printf("%02X", encryptedData[i]); } printf("\n"); printf("Decrypted data: %s\n", decryptedData); RSA_free(keyPair); return 0; } ``` 该示例代码生成了一个2048位的RSA密钥对,并使用公钥加密了一个字符串,然后使用私钥解密得到原始字符串。注意,加密和解密时都使用了RSA_PKCS1_PADDING填充方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值