openssl使用和问题、踏坑整理

openssl使用问题整理

v1.1.1版本之后RSA结构的变化

代码从1.0.2转到openssl 3.0编译时报错:
error: dereferencing pointer to incomplete type ‘RSA’ {aka ‘struct rsa_st’}

不能通过RSA *rsa;
rsa->n去访问内部成员了。
在1.1.1之后,OpenSSL支持getter这样返回每个参数。

const BIGNUM *RSA_get0_n(const RSA *d);
const BIGNUM *RSA_get0_e(const RSA *d);
const BIGNUM *RSA_get0_d(const RSA *d);
const BIGNUM *RSA_get0_p(const RSA *d);
const BIGNUM *RSA_get0_q(const RSA *d);
const BIGNUM *RSA_get0_dmp1(const RSA *r);
const BIGNUM *RSA_get0_dmq1(const RSA *r);
const BIGNUM *RSA_get0_iqmp(const RSA *r);

#The RSA_size() and RSA_security_bits() functions were deprecated in OpenSSL 3.0.

https://blog.csdn.net/liao20081228/article/details/76285896

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我来依次回答你的两个问题。 ## 1. openssl使用 OpenSSL是一个强大的开源加密工具包,可以用于加密、解密、签名和验证数据等操作。 具体使用方法如下: 1. 安装OpenSSL:可以从官网下载安装包,根据操作系统安装。 2. 生成密钥对:使用openssl命令生成公私钥对。 ```bash openssl genrsa -out rsa_private_key.pem 2048 openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem ``` 3. 加密数据:使用公钥加密数据。 ```bash openssl rsautl -encrypt -in plaintext.txt -out ciphertext.txt -inkey rsa_public_key.pem -pubin ``` 4. 解密数据:使用私钥解密数据。 ```bash openssl rsautl -decrypt -in ciphertext.txt -out plaintext.txt -inkey rsa_private_key.pem ``` 5. 签名数据:使用私钥对数据进行签名。 ```bash openssl dgst -sha256 -sign rsa_private_key.pem -out signature.bin plaintext.txt ``` 6. 验证签名:使用公钥对签名进行验证。 ```bash openssl dgst -sha256 -verify rsa_public_key.pem -signature signature.bin plaintext.txt ``` ## 2. C#加密和数字签名 C#也提供了加密和数字签名的功能,可以使用System.Security.Cryptography命名空间下的类来实现。 具体使用方法如下: 1. 生成密钥对:使用RSACryptoServiceProvider类生成公私钥对。 ```csharp RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048); string privateKey = rsa.ToXmlString(true); string publicKey = rsa.ToXmlString(false); ``` 2. 加密数据:使用公钥加密数据。 ```csharp byte[] data = Encoding.UTF8.GetBytes("Hello World!"); byte[] encryptedData = rsa.Encrypt(data, false); ``` 3. 解密数据:使用私钥解密数据。 ```csharp byte[] decryptedData = rsa.Decrypt(encryptedData, false); string plaintext = Encoding.UTF8.GetString(decryptedData); ``` 4. 签名数据:使用私钥对数据进行签名。 ```csharp byte[] data = Encoding.UTF8.GetBytes("Hello World!"); byte[] signature = rsa.SignData(data, new SHA256CryptoServiceProvider()); ``` 5. 验证签名:使用公钥对签名进行验证。 ```csharp bool verified = rsa.VerifyData(data, new SHA256CryptoServiceProvider(), signature); ``` 以上就是关于openssl使用和C#加密和数字签名的简单介绍,希望能对你有所帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值