用C# 加密字符串后、再用C++解密字符串的各自代码

下面的代码,是用C#加密字符串和用C++加密、解密一个字符串,两种语言加密后的密文,解密后的明文都是相同的。

C#程序

using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;

using System.IO;

................................

  private void button1_Click(object sender, EventArgs e)
        {
            string clearText = textBox1.Text.Trim();                                         / /待加密的字符串
            byte[] clearBytes = Encoding.ASCII.GetBytes(clearText);
            using (var encryptor = RijndaelManaged.Create())
            {
                encryptor.KeySize = 128;
                encryptor.Padding = PaddingMode.Zeros;
                encryptor.Mode = CipherMode.CFB;
                encryptor.Key = Encoding.ASCII.GetBytes("01234567891234560123456789123456");
                encryptor.IV = Encoding.ASCII.GetBytes("0123456789123456");
                using (MemoryStream ms = new MemoryStream())
                {
                    using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(clearBytes, 0, clearBytes.Length);
                        cs.Close();
                    }
                    Array.Copy(ms.ToArray(), clearBytes, clearBytes.Length);
                    clearText = Convert.ToBase64String(clearBytes);
                }
            }
            textBox2.Text = clearText;
            //return clearText;
        }

...................................................................................................................................................................................................................................

**********************************************************************************************************************************************************************


C++ 加密、解密代码:

使用Crypto++库,需要在工程中包含库的头文件和静态链接库,头文件和静态链接库,到网上下载后编译

#include "stdafx.h"


#include <iostream>
#include "randpool.h"
#include "rsa.h"
#include "hex.h"
#include "files.h"


#include "config.h"
#include "stdcpp.h"
#include "modes.h"
#include"base64.h"


using namespace std;
using namespace CryptoPP;


#pragma comment(lib, "cryptlib.lib")

// 加密

string encrypt(const std::string& str_in, const std::string& key, const std::string& iv)
{
std::string str_out;
CryptoPP::CFB_Mode<CryptoPP::AES>::Encryption encryption((byte*)key.c_str(), key.length(), (byte*)iv.c_str());

CryptoPP::StringSource encryptor(str_in, true,
new CryptoPP::StreamTransformationFilter(encryption,
new CryptoPP::Base64Encoder(
new CryptoPP::StringSink(str_out),
false // do not append a newline
)
)
);
return str_out;
}

//解密

//------------------------
string decrypt(const std::string& str_in, const std::string& key, const std::string& iv)
{


std::string str_out;
CryptoPP::CFB_Mode<CryptoPP::AES>::Decryption decryption((byte*)key.c_str(), key.length(), (byte*)iv.c_str());


CryptoPP::StringSource decryptor(str_in, true,
new CryptoPP::Base64Decoder(
new CryptoPP::StreamTransformationFilter(decryption,
new CryptoPP::StringSink(str_out)
)
)
);
return str_out;
}

// Main函数

void main()
{
std::string str = "123456789012345";  //加密的字符串
std::string key = "01234567891234560123456789123456"; // 32 bytes
std::string iv = "0123456789123456"; // 16 bytes
std::string str_encrypted =  encrypt(str, key, iv);   //加密后密文

std::string str_decrypted = decrypt(str_encrypted, key, iv);  //解密后明文
std::cout << "str_encrypted: " << str_encrypted << std::endl;
std::cout << "str_decrypted: " << str_decrypted << std::endl;
int a;
cin >> a;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值