博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在你的 iOS App中 使用 OpenSSL 库 转发
阅读量:6038 次
发布时间:2019-06-20

本文共 5701 字,大约阅读时间需要 19 分钟。

在你的 iOS App中 使用 OpenSSL 库 转发

英文原文链接:

下文有错误 参照有风险:需要修改 输入命令行的部分 建议用英文原版里的!!!
在你的 iOS App中 使用 OpenSSL 库
——译自x2on的“Tutorial: iPhone Appwith compiled OpenSSL 1.0.0a Library”
原文地址:,本文有少许地方做了调整。
1、下载OpenSSL源代码库:
当前最新版本1.0.0d。
下载后,将其中的 openssl-1.0.0x 目录解压出来放在合适的地方。
2、编译OpenSSL
openssl是一个c语言函数库,为方便在Xcode中使用,我们需要把它编译为静态库。
打开crypto/ui/ui_openssl.c进行编辑。
static volatile sig_atomic_t intr_signal;
修改为:
static volatile int intr_signal;
否则会出现一个编译错误。
2.1 编译 i386 库(用于iPhone模拟器)
执行以下命令:
mkdir ssllibs 
将在用户主目录下建立ssllibs目录。
切换到openssl-1.0.0a安装(解压)目录,在其下建立3个子目录:
cd openssl-1.0.0a 
mkdir openssl_armv6 openssl_armv7 openssl_i386 
执行目录下的congfigure:
./configure BSD-generic32--openssldir=/Users/<username>/openssl-1.0.0a/openssl_i386
编辑 makefile 文件,找到:
CC= gcc
修改为:
CC=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc -arch i386
下一行,在CFLAG = 的后面增加
-isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk
进行编译:
make 
make install
检查 openssl_i386/lib目录下 libcrypto.a和 libssl.a 是否生成。
2.2 编译 armv6 库(armv6架构的iOS使用)
先将编译好的 i386 库保存到 ssllibs 目录:
mv openssl_i386 ../ssllibs 
清除上次编译的配置:
make clean
执行configure,重新生成新的编译配置:
./configure BSD-generic32--openssldir=/Users/<username>/openssl-1.0.0a/openssl_armv6
修改 makefile 文件,将 CC=gcc修改为:
CC= /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-arch armv6
注意,这里是iPhoneOS.platform而不是先前的 iPhoneSimulator.platform了。
同样,需要在CFLAG=后面加上:
-isysroot/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk
可以进行编译了:
make
make install
检查 openssl_armv6/lib 目录下 libcrypto.a和 libssl.a 是否生成。
2.3 编译 armv7 库(armv7 架构的 iOS 使用)
先将先前编译好的 armv6 库移到 ssllibs 目录。
mv openssl_armv6 ../ssllibs 
清除前面编译配置:
make clean
执行configure配置编译环境:
./configure BSD-generic32 --openssldir=/Users/<username>/openssl-1.0.0a/openssl_armv7
修改 makefile 文件,将 CC=cc修改为:
CC= /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-arch armv7
注意,gcc 编译选项 arch 由 armv6 变为了 armv7。
同时,在CFLAG=后面添加:
-isysroot/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk
进行编译:
make make 
install
检查 openssl_armv7/lib 目录下 libcrypto.a和 libssl.a 是否生成。
把编译结果移到ssllibs目录:
mv openssl_armv7 ../ssllibs
2.4 制作“通用”静态库
通用静态库是一个“多架构”文件,它是多个单一架构静态库的融合。
制作“通用”静态库需要使用 Mac OS X 的 lipo 命令(具体请参考Mac OS X 手册)。
合并 libcrypto.a 库:
lipo -create../ssllibs/openssl_i386/lib/libcrypto.a../ssllibs/openssl_armv6/lib/libcrypto.a ../ssllibs/openssl_armv7/lib/libcrypto.a-output ../ssllibs/libcrypto.a 
合并 libssl.a 库:
lipo -create ../ssllibs/openssl_i386/lib/libssl.a../ssllibs/openssl_armv6/lib/libssl.a ../ssllibs/openssl_armv7/lib/libssl.a-output ../ssllibs/libssl.a
3、在 Xcode 项目的进行设置
把 OpenSSL 的 include 目录拷贝到项目文件夹。
把 libcrypto.a 和 libssl.a 文件拷贝到项目文件夹。
把 libcrypto.a 和 libssl.a 文件拖到项目的Framework 组中。
在 target 上右键,选择 Get Info,将 LibrarySearch Path 设置为:
$(inherited) “$(SRCROOT)”
将 User Header Search Paths 设为include。
选中 Always Search User Paths 选项。
现在可以在你的iPhone项目中实用OpenSSL了。
4、写一个应用 OpenSSL 的小例子
新建 Window-based application,命名为OpenSSLTest.
“AddàExisting FrameworksàOthers…”,把libssl.a和libcrypto.a加进来(即我们前面制作的“通用”库)。
打开项目info 的 Build 设置,在 HeaderSearch Paths 中加入 OpenSSL 的头文件路径,如:
/Users/<yourname>/Library/openssl-1.0.0a/include
注意,勾上“Recursive”(搜索子目录)。
接下来写点简单的代码。为求省事,我们把所有代码写在main.m里:
#import <UIKit/UIKit.h>
#include <Openssl/md5.h>
voidMd5(NSString*);
intmain(intargc, char*argv[]) {
NSAutoreleasePool* pool = [[NSAutoreleasePoolallocinit];
Md5(@"12345");
intretVal = UIApplicationMain(argc, argv, nilnil);
[pool release];
returnretVal;
}
voidMd5(NSString* string){
// 输入参数1:要生成md5值的字符串,NSString-->uchar*
unsignedchar*inStrg = (unsignedchar*)[[string dataUsingEncoding:NSASCIIStringEncoding] bytes];
// 输入参数2:字符串长度
unsignedlonglngth =[string length];
// 输出参数3:要返回的md5值,MD5_DIGEST_LENGTH16bytes128 bits
unsignedcharresult[MD5_DIGEST_LENGTH];
// 临时NSString变量,用于把uchar* 组装成可以显示的字符串:个字符一byte 16 进制数
NSMutableString*outStrg =[NSMutableStringstring];
// 调用OpenSSL 函数
MD5(inStrg,lngth, result);
unsignedinti;
for(i = 0; i < MD5_DIGEST_LENGTH; i++)
{
[outStrg appendFormat:@"%02x", result];
}
NSLog(@"inputstring:%@",string);
NSLog(@"md5:%@",outStrg);
}
你可以在控制台查看程序的输出:
inputstring:12345
md5:827ccb0eea8a706c4c34a16891f84e7b

 

 

 

下文仅供参考:并不实用

http://atastypixel.com/blog/easy-inclusion-of-openssl-into-iphone-app-projects/

Easy inclusion of OpenSSL into iOS projects

 

Oddly, iOS doesn’t provide any OpenSSL implementation at all — If you want to do anything with crypto (like checking signatures, checksumming, etc.), you have to build in the library yourself.

I came across a great  for OpenSSL yesterday, by Stephen Lombardo. This is an XCode project file that contains a target to build OpenSSL from source, and works with both Mac and iOS projects. I made some  to it, in order to make it work by just dropping in the OpenSSL source tarball, without having to dirty up your source tree with the extracted OpenSSL distribution.

Here’s how to use it:

  1. .
  2. Put the downloaded OpenSSL source tar.gz into the same folder as openssl.xcodeproj (I put it in Library/openssl within my project tree).
  3. Drag the openssl.xcodeproj file into your main project tree in XCode.
  4. Right-click on your project target, and add openssl.xcodeproj under “Direct Dependencies” on the General tab.
  5. On the Build tab for your project’s target, find the “Header Search Paths” option, and add the path:

    $(SRCROOT)/Library/openssl/build/openssl.build/openssl/include

    (Assuming you’ve put openssl.xcodeproj at the path Library/openssl — adjust as necessary).

  6. Expand your target’s “Link Binary With Libraries” build stage, and drag libcrypto.a from the openssl.xcodeproj group.

Then, you can just import and use as normal (#import <openssl/dsa.h>, etc).

 

 

转载于:https://www.cnblogs.com/pengyingh/articles/2499154.html

你可能感兴趣的文章
某机字长为32位,存储容量为64MB,若按字节编址.它的寻址范围是多少?
查看>>
VC++ 监视文件(夹)
查看>>
【转】keyCode对照表及JS监听组合按键
查看>>
[Java开发之路](14)反射机制
查看>>
mac gentoo-prefix安装git svn
查看>>
浅尝异步IO
查看>>
C - Train Problem II——(HDU 1023 Catalan 数)
查看>>
Speak loudly
查看>>
iOS-在项目中引入RSA算法
查看>>
[译] 听说你想学 React.js ?
查看>>
gulp压缩合并js与css
查看>>
块级、内联、内联块级
查看>>
Predicate
查看>>
[面试题记录01]实现一个function sum达到一下目的
查看>>
这个季节的忧伤,点到为止
查看>>
mysql通过配置文件进行优化
查看>>
省级网站群建设关注点
查看>>
工作第四天之采集资源
查看>>
innobackupex 在增量的基础上增量备份
查看>>
Windows Server 2012 R2 DirectAccess功能测试(2)App1服务器安装及配置
查看>>