Q
例加密+
37
A
回答
60
Crypto++ AES的正式文件是一個好的開始。從我的存檔中,AES的基本實現如下:
請參考here更多解釋,我建議您先了解algorithm,然後嘗試逐步瞭解每一行。
#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
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() + 1);
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<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;
}
有關安裝的詳細信息:
sudo apt-get install libcrypto++-dev libcrypto++-doc libcrypto++-utils
相關問題
- 1. 示例加密媒體擴展加密
- 2. 彙編代碼。加密解密例程
- 3. PHP和Java加密和解密例程
- 4. AES加密,示例代碼
- 5. Opengpg.js加密/ Decrypyt示例
- 6. C#DES加密示例
- 7. ElGamal加密的例子?
- 8. 使用用戶密碼加密數據的AES加密示例類
- 9. SSH密鑰對 - 添加到EC2實例
- 10. 使用luks加密根實例卷?
- 11. 加密SHA512在c中的示例
- 12. 河豚加密示例代碼
- 13. ANT +單通道加密示例
- 14. C#AES256加密使用System.Security.Cryptography.Aes示例
- 15. AttributeError:加密實例沒有屬性'__getitem__'
- 16. Google App Engine的RSA加密例程Python
- 17. 移植的Java加密例程以C#
- 18. 不使用密碼實例或密鑰進行加密和解密
- 19. 解密 - 加密加密JS
- 20. 解密Windows實例密碼
- 21. Mac上的公鑰加密/解密示例代碼?
- 22. 在保存案例的同時使用密鑰加密文本?
- 23. AWS:使用KMS加密的主密碼創建RDS實例
- 24. 好斯坦福JavaScript加密庫(SJCL)的例子? (JS密碼術)
- 25. 使用ruby和openssl加密和解密示例
- 26. 只有密碼的加密示例...沒有鹽。它工作嗎?
- 27. 使用DirectCompute進行AES加密/解密的示例代碼
- 28. 將8位字段加密爲16位(或更多)字符的加密例程
- 29. 加密密碼
- 30. 解密,加密
你想了解如何使用庫或算法的基礎? –
@MatteoItalia我需要爲我的項目使用AES,所以學習圖書館是必須的(因爲項目的最終期限)但是如果我可以在一路上挖掘一些知識,那將是非常棒的! – Yohannes
http://www.cryptopp.com/wiki/Advanced_Encryption_Standard –