Windows10 VS2017 C++使用crypto++庫加密解密(AES)
參考文章:
https://blog.csdn.net/tangcaijun/article/details/42110319
首先下載庫:
https://www.cryptopp.com/#download
使用vs2017開啟cryptest.sln檔案,解決方案選擇“重訂解決方案目標”,升級sdk。
編譯庫和dll檔案
將生成的cryptopp.lib和cryptopp.dll放到專案資料夾,如果單獨執行需要將dll檔案拷貝到debug資料夾和生成的exe檔案放在一起使用。
新建win32 c++控制檯程式,工程->配置屬性->vc++目錄->包含目錄,填寫cryptopp的目錄,需要使用其中的標頭檔案.
編碼:
#include "pch.h"
#include <iostream>
#include <fstream>
#include <aes.h>
#include <filters.h>
#include <modes.h>
#include <Windows.h>
#pragma comment(lib, "cryptopp.lib")
using namespace std;
byte key[CryptoPP::AES::DEFAULT_KEYLENGTH], iv[CryptoPP::AES::BLOCKSIZE];
void initKV()
{
memset(key, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH);
memset(iv, 0x00, CryptoPP::AES::BLOCKSIZE);
// 或者也可以
/*
char tmpK[] = "1234567890123456";
char tmpIV[] = "1234567890123456";
for (int j = 0; j < CryptoPP::AES::DEFAULT_KEYLENGTH; ++j)
{
key[j] = tmpK[j];
}
for (int i = 0; i < CryptoPP::AES::BLOCKSIZE; ++i)
{
iv[i] = tmpIV[i];
}
*/
}
string encrypt(string plainText)
{
string cipherText;
//
CryptoPP::AES::Encryption aesEncryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);
CryptoPP::CBC_Mode_ExternalCipher::Encryption cbcEncryption(aesEncryption, iv);
CryptoPP::StreamTransformationFilter stfEncryptor(cbcEncryption, new CryptoPP::StringSink(cipherText));
stfEncryptor.Put(reinterpret_cast<const unsigned char*>(plainText.c_str()), plainText.length() + 1);
stfEncryptor.MessageEnd();
string cipherTextHex;
for (int i = 0; i < cipherText.size(); i++)
{
char ch[3] = { 0 };
sprintf_s(ch, "%02x", static_cast<byte>(cipherText[i]));
cipherTextHex += ch;
}
return cipherTextHex;
}
void writeCipher(string output)
{
ofstream out("cipher.data");
out.write(output.c_str(), output.length());
out.close();
cout << "writeCipher finish " << endl << endl;
}
string decrypt(string cipherTextHex)
{
string cipherText;
string decryptedText;
int i = 0;
while (true)
{
char c;
int x;
stringstream ss;
ss << hex << cipherTextHex.substr(i, 2).c_str();
ss >> x;
c = (char)x;
cipherText += c;
if (i >= cipherTextHex.length() - 2)break;
i += 2;
}
//
CryptoPP::AES::Decryption aesDecryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);
CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption(aesDecryption, iv);
CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, new CryptoPP::StringSink(decryptedText));
stfDecryptor.Put(reinterpret_cast<const unsigned char*>(cipherText.c_str()), cipherText.size());
stfDecryptor.MessageEnd();
return decryptedText;
}
string readCipher()
{
ifstream in("cipher.data");
string line;
string decryptedText;
while (getline(in, line))
{
if (line.length() > 1)
{
decryptedText += decrypt(line) + "\n";
}
line.clear();
}
cout << "readCipher finish " << endl;
in.close();
return decryptedText;
}
int main()
{
string text = "What's up dude!";
cout << "text : " << text << endl;
initKV();
string cipherHex = encrypt(text);
cout << "cipher : " << cipherHex << endl;
writeCipher(cipherHex);
string decrpt_text = readCipher();
cout << "text : " << decrpt_text << endl;
return 0;
}
執行結果:
相關文章
- AES加密解密加密解密
- AES 加密&解密加密解密
- AES CBC 加密解密加密解密
- Windows10 VS2017 C++ Json解析(使用jsoncpp庫)WindowsC++JSON
- Python AES 加密和解密(qbit)Python加密解密
- golang AES-CBC 加密解密Golang加密解密
- python AES-CBC 加密解密Python加密解密
- Python使用AES進行鹽值加密和解密Python加密解密
- Java AES加密和解密教程 - BaeldungJava加密解密
- AES位元組陣列加密解密流程陣列加密解密
- delphi加密C#解密(AES-256)加密C#解密
- AES線上加密解密-附AES128,192,256,CBC,CFB,ECB,OFB,PCBC各種加密解密原始碼加密解密原始碼
- RSA der加密 p12解密以及配合AES使用詳解加密解密
- Vue使用AES加密Vue加密
- Windows10 VS2017 C++ xml解析(tinyxml2庫)WindowsC++XML
- app直播原始碼,android AES加密解密實現APP原始碼Android加密解密
- 通過Go實現AES加密和解密工具Go加密解密
- AES加解密使用總結解密
- JavaScript前端和Java後端的AES加密和解密JavaScript前端後端加密解密
- windows10 vs2017 C++連線MySQLWindowsC++MySql
- AES實現財務資料的加密解密儲存加密解密
- OpenSSL 使用AES對檔案加解密解密
- CryptoJs 使用 AES CBC 加解密資料JS解密
- AES加密加密
- Windows10 VS2017 C++ ini解析(使用simpleini標頭檔案)WindowsC++
- Windows10 VS2017 C++訊號處理WindowsC++
- Windows10 VS2017 C++編譯Linux程式WindowsC++編譯Linux
- 介面加密傳輸設計及AES加解密程式碼DEMO加密解密
- 使用OpenSSL替代MCrypt實現AES加解密解密
- Golang AES加密Golang加密
- aes-gcm模式前端加解密(html頁面 js)——使用node-forge庫GC模式前端解密HTMLJS
- Windows10 VS2017 C++模擬點選按鍵WindowsC++
- MySQL 中 AES_DECRYPT 加密,如何在瀚高資料庫中使用MySql加密資料庫
- 前後端(PHP)使用AES對稱加密後端PHP加密
- C/C++ 常用加密與解密演算法C++加密解密演算法
- aes加密解密原始碼,含 128、192、256位,cbc、cfb、ecb、ofb、pcbc模式加密解密原始碼模式
- AES-CBC 模式加密模式加密
- Windows10 VS2017 C++去除unsafe提示得最簡單方法WindowsC++