您的位置:首页 > 编程语言 > C#

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

2016-07-20 22:48 633 查看
下面的代码,是用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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: