以下是我所拥有的一些细节。
在应用程序中创建了一个新的.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
答案 0 :(得分:1)
Crypto ++代码很好。你的问题出在其他地方。
您可以尝试cryptopp-5.6.2-ios on GitHub,而不是尝试交叉编译Crypto ++。它有一个预先构建的6.1 SDK胖库(armv7
,armv7s
,i386
);和7.0 SDK的预构建胖库(armv7
,armv7s
,arm64
,i386
)。