用C# 加密字符串后、再用C++解密字符串的各自代码
来源:互联网 发布:国土防线2优化补丁 编辑:程序博客网 时间:2024/05/19 15:39
下面的代码,是用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;
}
- 用C# 加密字符串后、再用C++解密字符串的各自代码
- C# 字符串加密 解密
- C#字符串加密解密
- C#加密解密字符串
- C# 加密解密字符串
- C# 字符串加密解密
- C# 加密解密URL传输的字符串
- C#一个字符串的加密与解密
- 字符串的加密解密
- C# DES加密/解密字符串
- C# DES加密/解密字符串
- C# DES加密/解密字符串
- C#对字符串加密解密
- C#加密和解密字符串
- C# DES加密解密字符串
- C# DES加密/解密字符串
- c# 对字符串加密解密
- C# 加密解密链接字符串
- java se-作业2--随机数-2016.719
- wifi 驱动 进阶11
- C的头文件和java的引包
- 杭电博弈入门题
- Android ActionBar的基本用法
- 用C# 加密字符串后、再用C++解密字符串的各自代码
- Learning Python 010 函数 2
- xml文档解析之DOM、SAX、JDOM、Dom4J总结
- Codeforces Round #363 (Div. 2), problem: (A)
- wpa_supplicant无线网络配置
- java se作业-GPSCar--2016.7.20
- Android Fragmnet详解
- cocos2dx v3.x之CCAction变化
- PHP根据二维数组的某键值合并二维数组