c++ 调用c#进行RSA加解密

#include <stdio.h>
#include <string>
#include <memory>
#include<iostream>
#include <msclr\marshal_cppstd.h> 
using namespace System;
using namespace System::IO;
using namespace System::Text;
using namespace System::Security::Cryptography;
using namespace msclr::interop;
using namespace  std;

ref class SomeClass
{
public:
	static String^ RSADecrypt(String^ privatekey, String^ content)
	{

		RSACryptoServiceProvider^ rsa = gcnew RSACryptoServiceProvider();
		rsa->FromXmlString(privatekey);
		rsa->Decrypt(Convert::FromBase64String(content), false);
		UTF8Encoding^ utf8 = gcnew UTF8Encoding;
		return utf8->GetString(rsa->Decrypt(Convert::FromBase64String(content), false));
	}

	static String^ RSAEncrypt(String^ publickey, String^ content)
	{
		RSACryptoServiceProvider^ rsa = gcnew RSACryptoServiceProvider();
		rsa->FromXmlString(publickey);
		UTF8Encoding^ utf8 = gcnew UTF8Encoding;
		return Convert::ToBase64String(rsa->Encrypt(utf8->GetBytes(content), false));
	}
};

delegate String^ MyCallbackRsa(String^ privatekey, String^ content);



static bool CheckRsa()
{
	string pubKey = "你的xml格式公钥";
	if (pubKey.empty())
		return false;	
	String^ strPubKey = marshal_as<String^>(pubKey);
	MyCallbackRsa^ callbackDec = gcnew MyCallbackRsa(SomeClass::RSADecrypt);
	MyCallbackRsa^ callbackEnc = gcnew MyCallbackRsa(SomeClass::RSAEncrypt);
	String^ enText = callbackEnc(strPubKey, "NDURJDLS00R434@8*&%@@@#LDJLDJJ4848922");
	String^ deText = callbackDec("你的xml格式的私钥", enText);
	if (deText == "NDURJDLS00R434@8*&%@@@#LDJLDJJ4848922")
	{
		return true;
	}
	return false;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值