OpenSSL RSA加解密 (.Net公钥加密/ Linux端私钥解密)

要求在.Net端生成公钥私钥对。

然后在.Net端使用RSA公钥加密;在Linux端使用RSA私钥解密。

最初的尝试是:.Net端使用RSACryptoServiceProvider; Linux端使用OpenSSL


搞了整整5个小时,有木有啊,有木有啊! .Net的RSA和OpenSSL对不上,有木有啊,有木有啊!

人都搞晕了就是对不上。最后解决方式换成了,.Net端使用 OpenSSL.Net.


.Net端代码

string publicKeyFile = context.Server.MapPath("~/App_Data/public.pem"); using( RSA rsa = RSA.FromPublicKey(BIO.File(publicKeyFile, "r")) ) { buffer = rsa.PublicEncrypt( buffer, RSA.Padding.OAEP); encryptedKey = Convert.ToBase64String(buffer); }

Linux端代码

BIO *b64, *bmem; // Base64解码 unsigned char *buffer = (unsigned char *)malloc(length); memset(buffer, 0, length); b64 = BIO_new(BIO_f_base64()); BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); bmem = BIO_new_mem_buf(szKey, length); bmem = BIO_push(b64, bmem); int len = BIO_read(bmem, buffer, length); BIO_free_all(bmem); // 加载私钥 BIO * key = NULL; RSA * r = NULL; key = BIO_new(BIO_s_file()); BIO_read_filename(key, "/val/XXX/private.pem" ); r = PEM_read_bio_RSAPrivateKey(key, NULL, NULL, NULL); BIO_free_all(key); unsigned char * plainText = (unsigned char *)malloc(len); memset( plainText, 0, len); // 解密 int ret = RSA_private_decrypt( RSA_size(r), buffer, plainText, r, RSA_PKCS1_OAEP_PADDING); RSA_free(r); free(plainText); free(buffer);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值