Encryption 使用加密++; 我在网上搜索了强>好/强> C++ AES代码示例/教程,教给了加密技术和图书馆的使用基础,但到目前为止我还没有得到像样的材料的运气。
好:易于理解(只是进行学习的基础)。的官方文件是一个良好的开端。根据我的存档,AES的基本实现如下所示: 请参考更多的解释,我建议您首先理解,然后尝试一步一步地理解每一行Encryption 使用加密++; 我在网上搜索了强>好/强> C++ AES代码示例/教程,教给了加密技术和图书馆的使用基础,但到目前为止我还没有得到像样的材料的运气。,encryption,cryptography,aes,crypto++,Encryption,Cryptography,Aes,Crypto++,好:易于理解(只是进行学习的基础)。的官方文件是一个良好的开端。根据我的存档,AES的基本实现如下所示: 请参考更多的解释,我建议您首先理解,然后尝试一步一步地理解每一行 #include <iostream> #include <iomanip> #include "modes.h" #include "aes.h" #include "filters.h" int main(int argc, char*
#include <iostream>
#include <iomanip>
#include "modes.h"
#include "aes.h"
#include "filters.h"
int main(int argc, char* argv[]) {
//Key and IV setup
//AES encryption uses a secret key of a variable length (128-bit, 196-bit or 256-
//bit). This key is secretly exchanged between two parties before communication
//begins. DEFAULT_KEYLENGTH= 16 bytes
CryptoPP::byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ];
memset( key, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH );
memset( iv, 0x00, CryptoPP::AES::BLOCKSIZE );
//
// String and Sink setup
//
std::string plaintext = "Now is the time for all good men to come to the aide...";
std::string ciphertext;
std::string decryptedtext;
//
// Dump Plain Text
//
std::cout << "Plain Text (" << plaintext.size() << " bytes)" << std::endl;
std::cout << plaintext;
std::cout << std::endl << std::endl;
//
// Create Cipher Text
//
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() );
stfEncryptor.MessageEnd();
//
// Dump Cipher Text
//
std::cout << "Cipher Text (" << ciphertext.size() << " bytes)" << std::endl;
for( int i = 0; i < ciphertext.size(); i++ ) {
std::cout << "0x" << std::hex << (0xFF & static_cast<CryptoPP::byte>(ciphertext[i])) << " ";
}
std::cout << std::endl << std::endl;
//
// Decrypt
//
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();
//
// Dump Decrypted Text
//
std::cout << "Decrypted Text: " << std::endl;
std::cout << decryptedtext;
std::cout << std::endl << std::endl;
return 0;
}
#包括
#包括
#包括“modes.h”
#包括“aes.h”
#包括“filters.h”
int main(int argc,char*argv[]){
//钥匙和IV设置
//AES加密使用可变长度的密钥(128位、196位或256-
//此密钥在通信前由双方秘密交换
//开始。默认值为16字节
CryptoPP::byte key[CryptoPP::AES::DEFAULT_KEYLENGTH],iv[CryptoPP::AES::BLOCKSIZE];
memset(key,0x00,CryptoPP::AES::DEFAULT_key length);
memset(iv,0x00,CryptoPP::AES::BLOCKSIZE);
//
//串和接收器设置
//
std::string plaintext=“现在是所有好人都来帮忙的时候了……”;
字符串密文;
std::字符串解密文本;
//
//转储纯文本
//
std::你想了解如何使用库或算法的基础吗?@MatteoItalia我需要在我的项目中使用AES,因此必须学习库(因为项目截止日期)但是,如果我能在此过程中积累一些知识,那就太好了!遗憾的是,这个问题已经解决了!我在附加依赖项中添加了cryptlib.lib,并试图在VS2010上构建它,但得到了47个链接错误,大多数错误如下:-错误LNK2005:_tolower已经在MSVCRTD.lib(MSVCR100D.dll)中定义,这方面有什么帮助吗?我不知道密钥是在哪里初始化的,我应该如何用一个大小未知的std::string类型初始化它?@AMomchilov,原因是当输入字节数组使用代码plaintext.length()时+1
,因此最后一个0x0
被添加到编码器的输入字节数组中。我只看到明文的大小是55,但解密文本的大小是56。我认为我们应该使用明文.length()
,而不是明文.length()+1
@Shalec:是的,这是一个愚蠢的声明。我删除了它。这对我来说非常有效,但我发现decryptedtext
字符串比明文
长一个字节,因为它有一个额外的尾随空字节。我还必须修复字节
类型缺少的名称空间,正如@mika所指出的。我更新了用这些修正来回答。