ios常见加密解密方法(RSA、DES 、AES、MD5)

发布时间 - 2026-01-10 23:04:57    点击率:

最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,服务器也会返回数据,服务器是用Java开发的,客户端要同时支持多平台(Android、iOS),在处理iOS的数据加密的时候遇到了一些问题。起初采取的方案是DES加密,老大说DES加密是对称的,网络抓包加上反编译可能会被破解,故采取RSA方式加密。RSA加密时需要公钥和私钥,客户端保存公钥加密数据,服务器保存私钥解密数据。(iOS端公钥加密私钥解密、java端公钥加密私钥解密,java端私钥加密公钥解密都容易做到,iOS不能私钥加密公钥解密,只能用于验签)。

问题

问题1:iOS端公钥加密的数据用Java端私钥解密。

iOS无论使用系统自带的sdk函数,用mac产生的或者使用java的jdk产生的公钥和私钥,进行加密解密自己都可以使用。不过ios加密,java解密,或者反过来就不能用了。要么是无法创建报告个-9809或-50的错误,要么解出来是乱码。ios系统函数种只有用公钥加密,私钥解密的方式。而公钥加密每次结果都不同。

MAC上生成公钥、私钥的方法,及使用

1.打开终端,切换到自己想输出的文件夹下

2.输入指令:openssl(openssl是生成各种秘钥的工具,mac已经嵌入

3.输入指令:genrsa -out rsa_private_key.pem 1024 (生成私钥,java端使用的)

4.输入指令:rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout (生成公钥)

5.输入指令:pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem     -nocrypt(私钥转格式,在ios端使用私钥解密时用这个私钥)

注意:在MAC上生成三个.pem格式的文件,一个公钥,两个私钥,都可以在终端通过指令vim xxx.pem 打开,里面是字符串,第三步生成的私钥是java端用来解密数据的,第五步转换格式的私钥iOS端可以用来调试公钥、私钥解密(因为私钥不留在客户端)

问题2:服务器返回数据也要加密,老大打算用java私钥加密,ios用公钥解密(由于iOS做不到用私钥加密公钥解密,只能私钥加密公钥验签),所以这种方案也有问题。

通过看一些大牛的介绍,了解了iOS常用的加密方式

1 通过简单的URLENCODE + BASE64编码防止数据明文传输

2 对普通请求、返回数据,生成MD5校验(MD5中加入动态密钥),进行数据完整性(简单防篡改,安全性较低,优点:快速)校验

3 对于重要数据,使用RSA进行数字签名,起到防篡改作

4 对于比较敏感的数据,如用户信息(登陆、注册等),客户端发送使用RSA加密,服务器返回使用DES(AES)加密
原因:客户端发送之所以使用RSA加密,是因为RSA解密需要知道服务器私钥,而服务器私钥一般盗取难度较大;如果使用DES的话,可以通过破解客户端获取密钥,安全性较低。而服务器返回之所以使用DES,是因为不管使用DES还是RSA,密钥(或私钥)都存储在客户端,都存在被破解的风险,因此,需要采用动态密钥,而RSA的密钥生成比较复杂,不太适合动态密钥,并且RSA速度相对较慢,所以选用DES)
所以此次加密,我们选择了第四种加密方式

加密方式

ios端进行DES加密、解密时非常方便

1、引入头文件

 #import "DES3Util.h"

2、加密时调用类方法 

+(NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key;

3、解密时调用类方法 

+(NSString *)decryptUseDES:(NSString *)cipherText key:(NSString *)key;

ios端进行RSA加密、解密时非常方便

1、引入头文件

 #import "RSAUtil.h"

2、公钥加密时调用类方法:

+ (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey;
+ (NSData *)encryptData:(NSData *)data publicKey:(NSString *)pubKey;

3、私钥解密时调用类方法

+ (NSString *)decryptString:(NSString *)str privateKey:(NSString *)privKey;
+ (NSData *)decryptData:(NSData *)data privateKey:(NSString *)privKey;

ios端进行MD5加密、解密时非常方便

1、引入头文件

 #import "MD5Util"

2、加密时调用方法:

- (NSString *)md5:(NSString *)str;

ios端进行AES加密、解密时非常方便

1、引入头文件

#import "AES.h"

2、加密时调用方法

+ (NSString *)encrypt:(NSString *)message password:(NSString *)password;

2、解密时调用的方法

+ (NSString *)decrypt:(NSString *)base64EncodedString password:(NSString *)password;

效果图

Demo下载:Encryptions_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# ios  # 加密解密算法  # des加密解密  # rsa加密解密  # 一行代码实现IOS 3DES加密解密  # Android、iOS和Java通用的AES128加密解密示例代码  # iOS base64 加密解密 通用类实例代码  # 揭开iOS逆向解密的神秘面纱  # 公钥  # 客户端  # 头文件  # 是因为  # 较低  # 也有  # 也会  # 是有  # 不太  # 也要  # 可以通过  # 用了  # 就不能  # 可以使用  # 才行  # 第三步  # 时用  # 大家多多  # 切换到  # 较慢 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  如何在Windows环境下新建FTP站点并设置权限?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  高性价比服务器租赁——企业级配置与24小时运维服务  Angular 表单中正确绑定输入值以确保提交与验证正常工作  如何做网站制作流程,*游戏网站怎么搭建?  如何快速上传自定义模板至建站之星?  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  Laravel如何配置任务调度?(Cron Job示例)  浅谈Javascript中的Label语句  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  Laravel如何实现API版本控制_Laravel版本化API设计方案  网站制作软件免费下载安装,有哪些免费下载的软件网站?  phpredis提高消息队列的实时性方法(推荐)  如何快速生成凡客建站的专业级图册?  如何在 React 中条件性地遍历数组并渲染元素  公司网站制作价格怎么算,公司办个官网需要多少钱?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  如何在宝塔面板创建新站点?  长沙企业网站制作哪家好,长沙水业集团官方网站?  深入理解Android中的xmlns:tools属性  JavaScript如何实现继承_有哪些常用方法  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  个人摄影网站制作流程,摄影爱好者都去什么网站?  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  Laravel如何处理表单验证?(Requests代码示例)  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  如何快速辨别茅台真假?关键步骤解析  如何快速搭建高效WAP手机网站吸引移动用户?  如何基于云服务器快速搭建个人网站?  想要更高端的建设网站,这些原则一定要坚持!  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  成都品牌网站制作公司,成都营业执照年报网上怎么办理?