下面的代码,是用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;
}