Вот некоторые детали того, что у меня есть.
В приложении создан новый файл .mm, из которого я выполняю пример кода, который сейчас хочу отправить на консоль. Обратите внимание, что этот пример кода практически не изменился по сравнению с тем, который представлен в тестовом файле SymmetricCipher.cpp.
Настройки в проекте Настройки сборки:
Настройки Apple LLVM 4.2
Стандартная библиотека C ++ — libstdc ++
Внес те же изменения в существующий проект и просто вставил пример кода в существующий файл для проверки вывода. Это сработало без проблем.
Код в автономном приложении выдает исключение «EXC_BAD_ACCESS (код = 2, адрес = 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
Код Crypto ++ хорош. Ваша проблема лежит в другом месте.
Вместо того, чтобы пытаться скомпилировать Crypto ++, возможно, вам стоит попробовать cryptopp-5.6.2-ios на GitHub. Есть встроенная библиотека для 6.1 SDK (armv7
, armv7s
, i386
); и готовая библиотека для 7.0 SDK (armv7
, armv7s
, arm64
, i386
).
Других решений пока нет …