//加密
void CAESDlg::OnEncrypt()
{
int checkstring=((CButton *)GetDlgItem(IDC_STRING))->GetCheck();
int checkfile=((CButton *)GetDlgItem(IDC_FILE))->GetCheck();
CString strpass;
strpass = "1314";
unsigned char *pass=(unsigned char*)LPCTSTR(strpass);
unsigned char inBuff[25],ouBuff[25];
memset(inBuff,0,25);
memset(ouBuff,0,25);
Aes aes(32,pass);
CString stryuanwen,stryw;
GetDlgItemText(IDC_YUANWEN,stryuanwen);
CString str="",strTmp;
for (int i=0;i<stryuanwen.GetLength();i+=16)
{
stryw=stryuanwen.Mid(i,16);
memcpy(inBuff,stryw,16);
aes.Cipher(inBuff,ouBuff);
for(int i=0;i<16;i++)
{
strTmp.Format("%02x",ouBuff[i]);
str+=strTmp;
}
}
SetDlgItemText(IDC_CIPHERTEXT,str);
}
會不會是記憶體泄漏的原因呢?怎么修改呀!!
uj5u.com熱心網友回復:
stryw=stryuanwen.Mid(i,16); memcpy(inBuff,stryw,16); 如果字串不足長度,那么后面取到的可能是????另外建議CHAR WCHAR 確定型別,否則容易受編譯環境影響
uj5u.com熱心網友回復:
別重復造輪子了,需要什么自己復制粘貼
#include <aes.h>
#include <Hex.h> // StreamTransformationFilter
#include <modes.h> // CFB_Mode
#include <iostream> // std:cerr
#include <sstream> // std::stringstream
#include <string>
using namespace std;
using namespace CryptoPP;
#ifdef _DEBUG
#pragma comment(lib, "cryptlibd.lib" )
#endif
#ifdef _RELEASE
//#pragma comment(lib, "cryptlib.lib" )
#endif
std::string ECB_AESEncryptStr(std::string sKey, const char *plainText)
{
std::string outstr;
//填key
SecByteBlock key(AES::MAX_KEYLENGTH);
memset(key, 0x30, key.size());
sKey.size() <= AES::MAX_KEYLENGTH ? memcpy(key, sKey.c_str(), sKey.size()) : memcpy(key, sKey.c_str(), AES::MAX_KEYLENGTH);
AES::Encryption aesEncryption((byte *)key, AES::MAX_KEYLENGTH);
ECB_Mode_ExternalCipher::Encryption ecbEncryption(aesEncryption);
StreamTransformationFilter ecbEncryptor(ecbEncryption, new HexEncoder(new StringSink(outstr)));
ecbEncryptor.Put((byte *)plainText, strlen(plainText));
ecbEncryptor.MessageEnd();
return outstr;
}
std::string ECB_AESDecryptStr(std::string sKey, const char *cipherText)
{
std::string outstr;
//填key
SecByteBlock key(AES::MAX_KEYLENGTH);
memset(key, 0x30, key.size());
sKey.size() <= AES::MAX_KEYLENGTH ? memcpy(key, sKey.c_str(), sKey.size()) : memcpy(key, sKey.c_str(), AES::MAX_KEYLENGTH);
ECB_Mode<AES >::Decryption ecbDecryption((byte *)key, AES::MAX_KEYLENGTH);
HexDecoder decryptor(new StreamTransformationFilter(ecbDecryption, new StringSink(outstr)));
decryptor.Put((byte *)cipherText, strlen(cipherText));
decryptor.MessageEnd();
return outstr;
}
std::string CBC_AESEncryptStr(std::string sKey, std::string sIV, const char *plainText)
{
std::string outstr;
//填key
SecByteBlock key(AES::MAX_KEYLENGTH);
memset(key, 0x30, key.size());
sKey.size() <= AES::MAX_KEYLENGTH ? memcpy(key, sKey.c_str(), sKey.size()) : memcpy(key, sKey.c_str(), AES::MAX_KEYLENGTH);
//填iv
byte iv[AES::BLOCKSIZE];
memset(iv, 0x30, AES::BLOCKSIZE);
sIV.size() <= AES::BLOCKSIZE ? memcpy(iv, sIV.c_str(), sIV.size()) : memcpy(iv, sIV.c_str(), AES::BLOCKSIZE);
AES::Encryption aesEncryption((byte *)key, AES::MAX_KEYLENGTH);
CBC_Mode_ExternalCipher::Encryption cbcEncryption(aesEncryption, iv);
StreamTransformationFilter cbcEncryptor(cbcEncryption, new HexEncoder(new StringSink(outstr)));
cbcEncryptor.Put((byte *)plainText, strlen(plainText));
cbcEncryptor.MessageEnd();
return outstr;
}
std::string CBC_AESDecryptStr(std::string sKey, std::string sIV, const char *cipherText)
{
std::string outstr;
//填key
SecByteBlock key(AES::MAX_KEYLENGTH);
memset(key, 0x30, key.size());
sKey.size() <= AES::MAX_KEYLENGTH ? memcpy(key, sKey.c_str(), sKey.size()) : memcpy(key, sKey.c_str(), AES::MAX_KEYLENGTH);
//填iv
byte iv[AES::BLOCKSIZE];
memset(iv, 0x30, AES::BLOCKSIZE);
sIV.size() <= AES::BLOCKSIZE ? memcpy(iv, sIV.c_str(), sIV.size()) : memcpy(iv, sIV.c_str(), AES::BLOCKSIZE);
CBC_Mode<AES >::Decryption cbcDecryption((byte *)key, AES::MAX_KEYLENGTH, iv);
HexDecoder decryptor(new StreamTransformationFilter(cbcDecryption, new StringSink(outstr)));
decryptor.Put((byte *)cipherText, strlen(cipherText));
decryptor.MessageEnd();
return outstr;
}
std::string CBC_CTS_AESEncryptStr(std::string sKey, std::string sIV, const char *plainText)
{
std::string outstr;
//填key
SecByteBlock key(AES::MAX_KEYLENGTH);
memset(key, 0x30, key.size());
sKey.size() <= AES::MAX_KEYLENGTH ? memcpy(key, sKey.c_str(), sKey.size()) : memcpy(key, sKey.c_str(), AES::MAX_KEYLENGTH);
//填iv
byte iv[AES::BLOCKSIZE];
memset(iv, 0x30, AES::BLOCKSIZE);
sIV.size() <= AES::BLOCKSIZE ? memcpy(iv, sIV.c_str(), sIV.size()) : memcpy(iv, sIV.c_str(), AES::BLOCKSIZE);
AES::Encryption aesEncryption((byte *)key, AES::MAX_KEYLENGTH);
CBC_CTS_Mode_ExternalCipher::Encryption cbcctsEncryption(aesEncryption, iv);
StreamTransformationFilter cbcctsEncryptor(cbcctsEncryption, new HexEncoder(new StringSink(outstr)));
cbcctsEncryptor.Put((byte *)plainText, strlen(plainText));
cbcctsEncryptor.MessageEnd();
return outstr;
}
std::string CBC_CTS_AESDecryptStr(std::string sKey, std::string sIV, const char *cipherText)
{
std::string outstr;
//填key
SecByteBlock key(AES::MAX_KEYLENGTH);
memset(key, 0x30, key.size());
sKey.size() <= AES::MAX_KEYLENGTH ? memcpy(key, sKey.c_str(), sKey.size()) : memcpy(key, sKey.c_str(), AES::MAX_KEYLENGTH);
//填iv
byte iv[AES::BLOCKSIZE];
memset(iv, 0x30, AES::BLOCKSIZE);
sIV.size() <= AES::BLOCKSIZE ? memcpy(iv, sIV.c_str(), sIV.size()) : memcpy(iv, sIV.c_str(), AES::BLOCKSIZE);
CBC_CTS_Mode<AES >::Decryption cbcctsDecryption((byte *)key, AES::MAX_KEYLENGTH, iv);
HexDecoder decryptor(new StreamTransformationFilter(cbcctsDecryption, new StringSink(outstr)));
decryptor.Put((byte *)cipherText, strlen(cipherText));
decryptor.MessageEnd();
return outstr;
}
std::string CFB_AESEncryptStr(std::string sKey, std::string sIV, const char *plainText)
{
std::string outstr;
//填key
SecByteBlock key(AES::MAX_KEYLENGTH);
memset(key, 0x30, key.size());
sKey.size() <= AES::MAX_KEYLENGTH ? memcpy(key, sKey.c_str(), sKey.size()) : memcpy(key, sKey.c_str(), AES::MAX_KEYLENGTH);
//填iv
byte iv[AES::BLOCKSIZE];
memset(iv, 0x30, AES::BLOCKSIZE);
sIV.size() <= AES::BLOCKSIZE ? memcpy(iv, sIV.c_str(), sIV.size()) : memcpy(iv, sIV.c_str(), AES::BLOCKSIZE);
AES::Encryption aesEncryption((byte *)key, AES::MAX_KEYLENGTH);
CFB_Mode_ExternalCipher::Encryption cfbEncryption(aesEncryption, iv);
StreamTransformationFilter cfbEncryptor(cfbEncryption, new HexEncoder(new StringSink(outstr)));
cfbEncryptor.Put((byte *)plainText, strlen(plainText));
cfbEncryptor.MessageEnd();
return outstr;
}
std::string CFB_AESDecryptStr(std::string sKey, std::string sIV, const char *cipherText)
{
std::string outstr;
//填key
SecByteBlock key(AES::MAX_KEYLENGTH);
memset(key, 0x30, key.size());
sKey.size() <= AES::MAX_KEYLENGTH ? memcpy(key, sKey.c_str(), sKey.size()) : memcpy(key, sKey.c_str(), AES::MAX_KEYLENGTH);
//填iv
byte iv[AES::BLOCKSIZE];
memset(iv, 0x30, AES::BLOCKSIZE);
sIV.size() <= AES::BLOCKSIZE ? memcpy(iv, sIV.c_str(), sIV.size()) : memcpy(iv, sIV.c_str(), AES::BLOCKSIZE);
CFB_Mode<AES >::Decryption cfbDecryption((byte *)key, AES::MAX_KEYLENGTH, iv);
HexDecoder decryptor(new StreamTransformationFilter(cfbDecryption, new StringSink(outstr)));
decryptor.Put((byte *)cipherText, strlen(cipherText));
decryptor.MessageEnd();
return outstr;
}
std::string OFB_AESEncryptStr(std::string sKey, std::string sIV, const char *plainText)
{
std::string outstr;
//填key
SecByteBlock key(AES::MAX_KEYLENGTH);
memset(key, 0x30, key.size());
sKey.size() <= AES::MAX_KEYLENGTH ? memcpy(key, sKey.c_str(), sKey.size()) : memcpy(key, sKey.c_str(), AES::MAX_KEYLENGTH);
//填iv
byte iv[AES::BLOCKSIZE];
memset(iv, 0x30, AES::BLOCKSIZE);
sIV.size() <= AES::BLOCKSIZE ? memcpy(iv, sIV.c_str(), sIV.size()) : memcpy(iv, sIV.c_str(), AES::BLOCKSIZE);
AES::Encryption aesEncryption((byte *)key, AES::MAX_KEYLENGTH);
OFB_Mode_ExternalCipher::Encryption ofbEncryption(aesEncryption, iv);
StreamTransformationFilter ofbEncryptor(ofbEncryption, new HexEncoder(new StringSink(outstr)));
ofbEncryptor.Put((byte *)plainText, strlen(plainText));
ofbEncryptor.MessageEnd();
return outstr;
}
std::string OFB_AESDecryptStr(std::string sKey, std::string sIV, const char *cipherText)
{
std::string outstr;
//填key
SecByteBlock key(AES::MAX_KEYLENGTH);
memset(key, 0x30, key.size());
sKey.size() <= AES::MAX_KEYLENGTH ? memcpy(key, sKey.c_str(), sKey.size()) : memcpy(key, sKey.c_str(), AES::MAX_KEYLENGTH);
//填iv
byte iv[AES::BLOCKSIZE];
memset(iv, 0x30, AES::BLOCKSIZE);
sIV.size() <= AES::BLOCKSIZE ? memcpy(iv, sIV.c_str(), sIV.size()) : memcpy(iv, sIV.c_str(), AES::BLOCKSIZE);
OFB_Mode<AES >::Decryption ofbDecryption((byte *)key, AES::MAX_KEYLENGTH, iv);
HexDecoder decryptor(new StreamTransformationFilter(ofbDecryption, new StringSink(outstr)));
decryptor.Put((byte *)cipherText, strlen(cipherText));
decryptor.MessageEnd();
return outstr;
}
std::string CTR_AESEncryptStr(std::string sKey, std::string sIV, const char *plainText)
{
std::string outstr;
//填key
SecByteBlock key(AES::MAX_KEYLENGTH);
memset(key, 0x30, key.size());
sKey.size() <= AES::MAX_KEYLENGTH ? memcpy(key, sKey.c_str(), sKey.size()) : memcpy(key, sKey.c_str(), AES::MAX_KEYLENGTH);
//填iv
byte iv[AES::BLOCKSIZE];
memset(iv, 0x30, AES::BLOCKSIZE);
sIV.size() <= AES::BLOCKSIZE ? memcpy(iv, sIV.c_str(), sIV.size()) : memcpy(iv, sIV.c_str(), AES::BLOCKSIZE);
AES::Encryption aesEncryption((byte *)key, AES::MAX_KEYLENGTH);
CTR_Mode_ExternalCipher::Encryption ctrEncryption(aesEncryption, iv);
StreamTransformationFilter ctrEncryptor(ctrEncryption, new HexEncoder(new StringSink(outstr)));
ctrEncryptor.Put((byte *)plainText, strlen(plainText));
ctrEncryptor.MessageEnd();
return outstr;
}
std::string CTR_AESDecryptStr(std::string sKey, std::string sIV, const char *cipherText)
{
std::string outstr;
//填key
SecByteBlock key(AES::MAX_KEYLENGTH);
memset(key, 0x30, key.size());
sKey.size() <= AES::MAX_KEYLENGTH ? memcpy(key, sKey.c_str(), sKey.size()) : memcpy(key, sKey.c_str(), AES::MAX_KEYLENGTH);
//填iv
byte iv[AES::BLOCKSIZE];
memset(iv, 0x30, AES::BLOCKSIZE);
sIV.size() <= AES::BLOCKSIZE ? memcpy(iv, sIV.c_str(), sIV.size()) : memcpy(iv, sIV.c_str(), AES::BLOCKSIZE);
CTR_Mode<AES >::Decryption ctrDecryption((byte *)key, AES::MAX_KEYLENGTH, iv);
HexDecoder decryptor(new StreamTransformationFilter(ctrDecryption, new StringSink(outstr)));
decryptor.Put((byte *)cipherText, strlen(cipherText));
decryptor.MessageEnd();
return outstr;
}
}
uj5u.com熱心網友回復:
接上面的,長度超過范圍了
int main(int argc, char* argv[])
{
string plainText = "40:45:78:41:52:7b";
string aesKey = "暢想飛揚";//256bits, also can be 128 bits or 192bits
//string plainText = "This Program shows how to use ECB, CBC, CBC_CTS, CFB, OFB and CTR mode of AES in Crypto++.";
//string aesKey = "0123456789ABCDEF0123456789ABCDEF";//256bits, also can be 128 bits or 192bits
string aesIV = "ABCDEF0123456789";//128 bits
string ECB_EncryptedText, ECB_DecryptedText,
CBC_EncryptedText, CBC_DecryptedText,
CBC_CTS_EncryptedText, CBC_CTS_DecryptedText,
CFB_EncryptedText, CFB_DecryptedText,
OFB_EncryptedText, OFB_DecryptedText,
CTR_EncryptedText, CTR_DecryptedText;
std::string ss1 = "1234567812345678";
std::string ss = "暢飛揚測驗";
string str = CBC_AESEncryptStr(ss,"ABCDEF0123456789",ss1.c_str());
//std::string str = CBC_AESDecryptStr(ss1,"ABCDEF0123456789",ss.c_str());
////ECB
//ECB_EncryptedText = ECB_AESEncryptStr(aesKey, plainText.c_str());//ECB加密
//ECB_DecryptedText = ECB_AESDecryptStr(aesKey, ECB_EncryptedText.c_str());//ECB解密
//CBC
CBC_EncryptedText = CBC_AESEncryptStr(aesKey, aesIV, plainText.c_str());//CBC加密
CBC_DecryptedText = CBC_AESDecryptStr(aesKey, aesIV, CBC_EncryptedText.c_str());//CBC解密
//CBC_CTS
CBC_CTS_EncryptedText = CBC_CTS_AESEncryptStr(aesKey, aesIV, plainText.c_str());//CBC_CTS加密
CBC_CTS_DecryptedText = CBC_CTS_AESDecryptStr(aesKey, aesIV, CBC_CTS_EncryptedText.c_str());//CBC_CTS解密
//CFB
CFB_EncryptedText = CFB_AESEncryptStr(aesKey, aesIV, plainText.c_str());//CFB加密
CFB_DecryptedText = CFB_AESDecryptStr(aesKey, aesIV, CFB_EncryptedText.c_str());//CFB解密
//OFB
OFB_EncryptedText = OFB_AESEncryptStr(aesKey, aesIV, plainText.c_str());//OFB加密
OFB_DecryptedText = OFB_AESDecryptStr(aesKey, aesIV, OFB_EncryptedText.c_str());//OFB解密
//CTR
CTR_EncryptedText = CTR_AESEncryptStr(aesKey, aesIV, plainText.c_str());//CTR加密
CTR_DecryptedText = CTR_AESDecryptStr(aesKey, aesIV, CTR_EncryptedText.c_str());//CTR解密
cout << "Crypto++ AES-256 加密測驗" << endl;
cout << "分別使用ECB,CBC, CBC_CTR,CFB,OFB和CTR模式" << endl;
cout << "加密用密鑰:" << aesKey << endl;
cout << "密鑰長度:" << AES::MAX_KEYLENGTH * 8 << "bits" << endl;
cout << "IV:" << aesIV << endl;
cout << endl;
cout << "ECB加密測驗" << endl;
cout << "MAC原文:" << plainText << endl;
cout << "密文:" << ECB_EncryptedText << endl;
cout << "恢復明文:" << ECB_DecryptedText << endl << endl;
cout << "CBC加密測驗" << endl;
cout << "MAC原文:" << plainText << endl;
cout << "密文:" << CBC_EncryptedText << endl;
cout << "恢復明文:" << CBC_DecryptedText << endl << endl;
cout << "CBC_CTS加密測驗" << endl;
cout << "MAC原文:" << plainText << endl;
cout << "密文:" << CBC_CTS_EncryptedText << endl;
cout << "恢復明文:" << CBC_CTS_DecryptedText << endl << endl;
cout << "CFB加密測驗" << endl;
cout << "MAC原文:" << plainText << endl;
cout << "密文:" << CFB_EncryptedText << endl;
cout << "恢復明文:" << CFB_DecryptedText << endl << endl;
cout << "OFB加密測驗" << endl;
cout << "MAC原文:" << plainText << endl;
cout << "密文:" << OFB_EncryptedText << endl;
cout << "恢復明文:" << OFB_DecryptedText << endl << endl;
cout << "CTR加密測驗" << endl;
cout << "MAC原文:" << plainText << endl;
cout << "密文:" << CTR_EncryptedText << endl;
cout << "恢復明文:" << CTR_DecryptedText << endl << endl;
getchar();
return 0;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/76893.html
標籤:圖形處理/算法
上一篇:opencv圓直徑和圓心檢測求助
