Encryption 使用加密++; 我在网上搜索了强>好/强> C++ 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*

好:易于理解(只是进行学习的基础)。

的官方文件是一个良好的开端。根据我的存档,AES的基本实现如下所示:

请参考更多的解释,我建议您首先理解,然后尝试一步一步地理解每一行

#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所指出的。我更新了用这些修正来回答。