0

这是我所拥有的一些细节。

  • 单独编译的 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
    
4

1 回答 1

1

Crypto++ 代码很好。你的问题在别处。

与其尝试交叉编译 Crypto++,不如尝试在 GitHub 上尝试 cryptopp-5.6.2-iosarmv7它为 6.1 SDK ( , armv7s, )提供了一个预构建的 fat 库i386armv7以及用于 7.0 SDK ( , armv7s, arm64, i386)的预构建 fat 库。

Crypto++/iOS 测试代码

于 2013-10-04T03:39:46.787 回答