iOS中DES与MD5加密方案

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: iOS中DES与MD5加密方案

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

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

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

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

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

  • (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为:

+(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的加密代码

+(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官方提供的是如下几种

enum {

kCCAlgorithmAES128 = 0,
kCCAlgorithmAES = 0,
kCCAlgorithmDES,
kCCAlgorithm3DES,       
kCCAlgorithmCAST,       
kCCAlgorithmRC4,
kCCAlgorithmRC2,   
kCCAlgorithmBlowfish    

};
(2)填充算法

enum {

/* options for block ciphers */
kCCOptionPKCS7Padding   = 0x0001,
kCCOptionECBMode        = 0x0002
/* stream ciphers currently have no options */

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

kCCOptionPKCS7Padding
但是不用担心,在密钥是8位的时候,这两种填充算法加密出来的结果试一模一样的。
4、服务器通过相同的方式,解密出密文,通配安卓端。

目录
相关文章
|
4月前
|
存储 安全 数据安全/隐私保护
浅谈对称加密(AES与DES)
浅谈对称加密(AES与DES)
88 1
|
24天前
|
算法 网络安全 区块链
2023/11/10学习记录-C/C++对称分组加密DES
本文介绍了对称分组加密的常见算法(如DES、3DES、AES和国密SM4)及其应用场景,包括文件和视频加密、比特币私钥加密、消息和配置项加密及SSL通信加密。文章还详细展示了如何使用异或实现一个简易的对称加密算法,并通过示例代码演示了DES算法在ECB和CBC模式下的加密和解密过程,以及如何封装DES实现CBC和ECB的PKCS7Padding分块填充。
45 4
2023/11/10学习记录-C/C++对称分组加密DES
|
24天前
|
算法 数据安全/隐私保护 Python
DES加密初探
本文介绍了Python中常用的DES和3DES加解密方法,包括ECB和CBC模式。通过示例代码展示了如何使用`Crypto`和`pyDes`库实现加解密,并讨论了不同的填充方式。最后,通过一道CTF例题,详细解析了从图像中提取密文、进行ASCII转换、Base64解码、凯撒解码和最终的DES解密过程。
52 4
DES加密初探
|
4月前
|
数据安全/隐私保护 Python
Python中的MD5加密“解密”
Python中的MD5加密“解密”
97 0
|
3月前
|
存储 Java 数据库
密码专辑:对密码加盐加密,对密码进行md5加密,封装成密码工具类
这篇文章介绍了如何在Java中通过加盐和加密算法(如MD5和SHA)安全地存储密码,并提供了一个密码工具类PasswordUtils和密码编码类PasswordEncoder的实现示例。
107 10
密码专辑:对密码加盐加密,对密码进行md5加密,封装成密码工具类
|
3月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
51 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
3月前
|
数据安全/隐私保护 Python
Python中的MD5加密“解密”
Python中的MD5加密“解密”
119 0
|
3月前
|
IDE 开发工具 数据安全/隐私保护
Python编程实现批量md5加密pdf文件
Python编程实现批量md5加密pdf文件
50 0
|
16天前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
|
1月前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。