这是我所拥有的一些细节。
- 单独编译的 crypto++ 构建并具有静态库 (libcryptopp.a)。
- 创建示例单视图应用程序并链接到上述库,创建新组以包含 crypto++ 标头。这些标头不会复制到应用程序的目标文件夹中。
在应用程序中创建了一个新的 .mm 文件,我正在从中执行一些我想暂时发送到控制台的示例代码。请注意,此示例代码与测试文件 SymmetricCipher.cpp 中提供的代码基本相同。
项目构建设置下的设置:
Apple LLVM 编译器 4.2 设置
- C 语言方言 - GNU99
- C++ 语言方言 - GNU++11
C++ 标准库 - libstdc++
对现有项目进行完全相同的更改,并在现有文件中插入示例代码以测试输出。这没有任何问题。
独立应用程序中的代码引发异常“EXC_BAD_ACCESS (code=2, address=0x20)”
#import "TestView.h" //Include C++ headers #ifdef __cplusplus #include "aes.h" // Includes all required Crypto++ // Block Cipher Headers #include "SymmetricCipher.h" #include <iostream> #include <iomanip> // Crypto++ Includes #include "modes.h" // xxx_Mode< > #include "filters.h" // StringSource and // StreamTransformation #include "sha.h" #include "base64.h" #endif @implementation TestView - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code } return self; } - (void)testBlock { //Test code byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ]; ::memset( key, 0x01, CryptoPP::AES::DEFAULT_KEYLENGTH ); ::memset( iv, 0x01, CryptoPP::AES::BLOCKSIZE ); // Message M std::string PlainText = "Yoda said,Do or Do Not. There is no try."; // Cipher Text Sink std::string CipherText; // Encryptor CryptoPP::CBC_Mode<CryptoPP::AES>::Encryption Encryptor( key, sizeof(key), iv ); // Encryption CryptoPP::StringSource( PlainText, true, new CryptoPP::StreamTransformationFilter( Encryptor, new CryptoPP::StringSink(CipherText )) // StreamTransformationFilter ); // StringSource // example of hashing followed by base64 encoding, using filters std::string digest; CryptoPP::SHA256 hash; // don't use MD5 anymore. It is considered insecure CryptoPP::StringSource foo(PlainText, true, new CryptoPP::HashFilter(hash, new CryptoPP::Base64Encoder (new CryptoPP::StringSink(digest)))); NSLog(@"SHA256 Hash %s", digest.c_str()); } @end