반응형
Crypto ++를 사용하는 AES의 예
저는 인터넷 에서 암호화 기술의 기초와 라이브러리 사용을 가르치는 좋은 C ++ AES 코드 샘플 / 튜토리얼을 검색해 왔지만 지금까지 괜찮은 자료를 얻을 수 없었습니다.
good : 이해하기 쉬움 (이동 학습을위한 기본 사항).
Crypto ++ AES 의 공식 문서 는 좋은 시작입니다. 그리고 내 아카이브에서 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;
}
설치 세부 정보 :
- Visual Studio 2010 Windows 7에서 Crypto ++를 어떻게 설치합니까?
- * nix 환경
- Ubuntu의 경우 다음을 수행했습니다.
sudo apt-get install libcrypto++-dev libcrypto++-doc libcrypto++-utils
ReferenceURL : https://stackoverflow.com/questions/12306956/example-of-aes-using-crypto
반응형
'Programing' 카테고리의 다른 글
브라우저의 User-Agent 문자열의 표준 형식은 무엇입니까? (0) | 2021.01.08 |
---|---|
위와 아래에 알 수없는 높이 div가있는 CSS를 사용하여 div를 나머지 높이로 설정 (0) | 2021.01.08 |
하나의 클래스 메서드에 별칭을 지정하는 더 간단한 (한 줄) 구문이 있습니까? (0) | 2021.01.08 |
리소스로드 실패 : 서버가 404 (찾을 수 없음) 상태로 응답했습니다. (0) | 2021.01.08 |
AngularJS $ http 성공 / 오류 메서드가 더 이상 사용되지 않는 이유는 무엇입니까? (0) | 2021.01.08 |