IOS中DES与MD5加密方案

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

MD5算法和DES算法是常见的两种加密算法。

MD5:MD5是一种不可逆的加密算法,按我的理解,所谓不可逆,就是不能解密,那么它有什么用的,它的用处大了,大多数的登录功能都会使用到这种算法。后面根据我的项目经验来介绍。

DES:一种使用密钥加密的块算法,所以,使用它加密时,需要一个密钥,加上一些设置和你需要加密的文段。

在IOS中,使用这两种加密算法非常简单,系统的<CommonCrypto/CommonCrypto.h>库给我们提供的边界的接口。在很多移动项目中,安卓平台和IOS平台的后台服务是统一的,比如一个登录功能是这样的流程:

1、客户端向服务端请求密钥,请求的参数是双方约定好的一个MD5加密的字符串。我们可以通过下面的进行第一步加密:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
- (NSString *)MD5Digest
{
     //要进行UTF8的转码
     const  char * input = [self UTF8String];
     unsigned  char  result[CC_MD5_DIGEST_LENGTH];
     CC_MD5(input, (CC_LONG) strlen (input), result);
     
     NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
     for  (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
         [digest appendFormat:@ "%02x" , result[i]];
     }
     
     return  digest;
}

通过这样的方法,我们可以很容易的得到一串MD5加密字符串,但是一定要和后台约定好,MD5加密的位数是16位还是32位,用上述方法加密出来的时32位,当然他们之间是有联系的,通过下面的方法可以将其转成16为:

?
1
2
3
4
5
6
7
+(NSString *)trransFromMD532ToMD516:(NSString *)MD532{
     NSString  * string;
     for  ( int  i=0; i<24; i++) {
         string=[MD532 substringWithRange:NSMakeRange(8, 16)];
     }
     return  string;
}

还有一点需要注意,加密后的大小写也要对应。

2、服务端将得到的MD5串和以约定好的MD5串进行对比,如果一致,可以放行,返回密钥。

3、客户端取到密钥,将密钥再进行一次MD5加密,然后通过DES将要传送的数据加密发给服务器。

这一步至关重要,我们先看DES的加密代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
+(NSString *) encryptUseDES:(NSString *)clearText key:(NSString *)key andiv:(NSString *)iv
{
     //这个iv 是DES加密的初始化向量,可以用和密钥一样的MD5字符
     NSData * date = [iv dataUsingEncoding:NSUTF8StringEncoding];
     NSString *ciphertext = nil;
     NSUInteger dataLength = [clearText length];
     NSData *textData = [clearText dataUsingEncoding:NSUTF8StringEncoding];
     
     unsigned  char  buffer[1024];
     memset (buffer, 0,  sizeof ( char ));
     size_t  numBytesEncrypted = 0;
     CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, //加密模式 kCCDecrypt 代表解密
                                           kCCAlgorithmDES, //加密方式
                                           kCCOptionPKCS7Padding, //填充算法
                                           [key UTF8String],  //密钥字符串
                                           kCCKeySizeDES, //加密位数
                                           [date bytes], //初始化向量
                                           [textData bytes]  ,
                                            dataLength,
                                           buffer, 1024,
                                           &numBytesEncrypted);
     if  (cryptStatus == kCCSuccess) {
         NSLog(@ "DES加密成功" );
         NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
         Byte* bb = (Byte*)[data bytes];
         ciphertext = [Base64 parseByteArray2HexString:bb];
     } else {
         NSLog(@ "DES加密失败" );
     }
     return  ciphertext;
}

几点注意:

(1)加密方式,IOS官方提供的是如下几种

?
1
2
3
4
5
6
7
8
9
10
enum  {
     kCCAlgorithmAES128 = 0,
     kCCAlgorithmAES = 0,
     kCCAlgorithmDES,
     kCCAlgorithm3DES,       
     kCCAlgorithmCAST,       
     kCCAlgorithmRC4,
     kCCAlgorithmRC2,   
     kCCAlgorithmBlowfish    
};

(2)填充算法

?
1
2
3
4
5
6
enum  {
     /* options for block ciphers */
     kCCOptionPKCS7Padding   = 0x0001,
     kCCOptionECBMode        = 0x0002
     /* stream ciphers currently have no options */
};

我们可以发现,官方提供的只有这两种,然而JAVA使用的却是

?
1
kCCOptionPKCS7Padding

但是不用担心,在密钥是8位的时候,这两种填充算法加密出来的结果试一模一样的。

4、服务器通过相同的方式,解密出密文,通配安卓端。


目录
相关文章
|
7月前
|
存储 NoSQL 数据库
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
这篇文章讲述了在分布式微服务系统中添加用户注册和登录功能的过程,重点介绍了用户注册时通过远程服务调用第三方服务获取短信验证码、使用Redis进行验证码校验、对密码进行MD5加密后存储到数据库,以及用户登录时的远程服务调用和密码匹配校验的实现细节。
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
|
6月前
|
数据安全/隐私保护 Python
Python中的MD5加密“解密”
Python中的MD5加密“解密”
144 0
|
5月前
|
存储 Java 数据库
密码专辑:对密码加盐加密,对密码进行md5加密,封装成密码工具类
这篇文章介绍了如何在Java中通过加盐和加密算法(如MD5和SHA)安全地存储密码,并提供了一个密码工具类PasswordUtils和密码编码类PasswordEncoder的实现示例。
161 10
密码专辑:对密码加盐加密,对密码进行md5加密,封装成密码工具类
|
5月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
91 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
5月前
|
数据安全/隐私保护 Python
Python中的MD5加密“解密”
Python中的MD5加密“解密”
162 0
|
6月前
|
存储 安全 数据库
双重防护,无懈可击!Python AES+RSA加密方案,构建最强数据安全堡垒
【9月更文挑战第11天】在数字时代,数据安全至关重要。AES与RSA加密技术相结合,构成了一道坚固防线。AES以其高效性保障数据加密,而RSA则确保密钥安全传输,二者相辅相成,提供双重保护。本文通过Python代码示例展示了这一加密方案的魅力,强调了其在实际应用中的重要性和安全性。使用HTTPS等安全协议传输加密密钥和密文,确保数据在数字世界中自由流通而无忧。
137 1
|
5月前
|
IDE 开发工具 数据安全/隐私保护
Python编程实现批量md5加密pdf文件
Python编程实现批量md5加密pdf文件
63 0
|
7月前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享安卓与iOS开发中的线程管理比较
【8月更文挑战第30天】本文将探讨网络安全与信息安全的重要性,并分享关于网络安全漏洞、加密技术和安全意识的知识。我们将了解常见的网络攻击类型和防御策略,以及如何通过加密技术和提高安全意识来保护个人和组织的信息安全。
|
18天前
|
云安全 安全 数据建模
《数字证书:互联网世界的"身份证"与"防盗门"》 ——揭秘网络安全背后的加密江湖
在2023年某深夜,上海陆家嘴金融公司机房遭遇黑客攻击,神秘青铜大门与九大掌门封印的玉牌突现,阻止了入侵。此门象征数字证书,保障网络安全。数字证书如验钞机识别假币,保护用户数据。它通过SSL/TLS加密、CA认证和非对称加密,构建安全通信。证书分为DV、OV、EV三类,分别适合不同场景。忽视证书安全可能导致巨额损失。阿里云提供一站式证书服务,助力企业部署SSL证书,迎接未来量子计算和物联网挑战。
|
3月前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密

热门文章

最新文章

  • 1
    uniapp云打包ios应用证书的获取方法,生成指南
    29
  • 2
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
    117
  • 3
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
    21
  • 4
    iOS各个证书生成细节
    36
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    165
  • 6
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    55
  • 7
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    76
  • 8
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    56
  • 9
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    67
  • 10
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    176