算法步骤:

DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位(实际用到了56位,第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1),其算法主要分为两步:
1)初始置换
其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则为将输入的第58位换到第一位,第50位换到第2位……依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:设置换前的输入值为D1D2D3……D64,则经过初始置换后的结果为:L0=D58D50……D8;R0=D57D49……D7。
其置换规则见下表:
58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,
57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,
2)逆置换
经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。
此算法是对称加密算法体系中的代表,在计算机网络系统中广泛使用.
 
OC 代码:
#import "NSString+MFDES.h"
#import <CommonCrypto/CommonCrypto.h>
// key 必须8位
#define key @"01234567"
// 向量
static Byte iv[] = {1, 2, 3, 4, 5, 6, 7, 8}; @implementation NSString (MFDES) // 1. 字符串对称加密(DES)
- (NSString *)stringWithDES{
// 1. 将字符串本身转化为C字符串
const char *string = [self UTF8String];
// 2. 接收容器
unsigned char byte[1024];
// 3. 容器大小
size_t dataOutMoved = 0;
// 4. DES加密过程
// 1. 参数1. 加密 或者 解密
// 2. 参数2: 加密 / 解密 方式
// 3. 参数3: 分组密码的选项
// 4. 参数4: 秘钥
// 5. 参数5: 秘钥的大小
// 6. 参数6: 向量
// 7. 参数7: c的字符串
// 8. 参数8: 字符串的长度
// 9. 参数9: 接收容器
// 10. 参数10: 容器的大小
// 11. 参数11: 容器最终的个数
CCCryptorStatus cryptorStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, string, strlen(string), byte, 1024, &dataOutMoved); if (cryptorStatus == kCCSuccess) {
// 转成字符串 ==== base64返回
NSLog(@"加密成功");
NSData *desData = [NSData dataWithBytes:byte length:dataOutMoved];
NSString *desBaseString = [desData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
return desBaseString; } else { NSLog(@"加密失败"); } return @""; } // 2. 字符串对称解密(DES)
- (NSString *)desWithString{ NSData *base64Data = [[NSData alloc] initWithBase64EncodedString:self options:NSDataBase64DecodingIgnoreUnknownCharacters]; const void *byte = base64Data.bytes;
unsigned char buffer[1024];
size_t dataOutMoved = 0; // C 语言方法
CCCryptorStatus cryptorStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, byte, base64Data.length, buffer, 1024, &dataOutMoved); if (cryptorStatus == kCCSuccess) { NSLog(@"解密成功");
NSData *desData = [NSData dataWithBytes:buffer length:dataOutMoved];
NSString *desBaseString = [[NSString alloc] initWithData:desData encoding:NSUTF8StringEncoding];
return desBaseString; } else { NSLog(@"解密失败"); } return @""; }

iOS -- DES算法的更多相关文章

  1. 在IOS中使用DES算法对Sqlite数据库进行内容加密存储并读取解密

    在IOS中使用DES算法对Sqlite 数据库进行内容加密存储并读取解密 涉及知识点: 1.DES加密算法: 2.OC对Sqlite数据库的读写: 3.IOS APP文件存储的两种方式及读取方式. 以 ...

  2. DES算法详解

    本文主要介绍了DES算法的步骤,包括IP置换.密钥置换.E扩展置换.S盒代替.P盒置换和末置换. 1.DES算法简介 DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准. DES是一个分组 ...

  3. 基于DES算法加密的防撞库密码系统项目总结

    项目内容:基于DES算法加密的防撞库密码系统 小组名:zqhzkzkj 目标:1.对用户输入的8位字符进行DES加密,要求用户输入8位密钥 2.对于不同的网站,不同的用户名生成不同的密码 小组成员:周 ...

  4. DES 算法的 C++ 与 JAVA 互相加解密

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. MFC 简单实现 DES 算法

    前言 徐旭东老师说过学者就应该对知识抱有敬畏之心,所以我的博客的标题总喜欢加上"简单"二字,就是为了提醒自己,自己所学知识只是皮毛,离真理还远矣. DES 算法 DES算法是密码体 ...

  6. Asp.Net 常用工具类之加密——对称加密DES算法(2)

    又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮! 转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有 ...

  7. AES算法,DES算法,RSA算法JAVA实现

    1     AES算法 1.1    算法描述 1.1.1      设计思想 Rijndael密码的设计力求满足以下3条标准: ① 抵抗所有已知的攻击. ② 在多个平台上速度快,编码紧凑. ③ 设计 ...

  8. 安全体系(一)—— DES算法详解

    本文主要介绍了DES算法的步骤,包括IP置换.密钥置换.E扩展置换.S盒代替.P盒置换和末置换. 安全体系(零)—— 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(二)——RSA算 ...

  9. DES算法原理完整版

    1.所需参数 key:8个字节共64位的工作密钥 data:8个字节共64位的需要被加密或被解密的数据 mode:DES工作方式,加密或者解密 2.初始置换 DES算法使用64位的密钥key将64位的 ...

随机推荐

  1. 【LabVIEW技巧】LabVIEW中的错误2

    前言 通过上一个文章的介绍,我们发现LabVIEW自带的错误管理依旧比较基础,如果需要对错误进行很好的管理,则需要进一步的进行程序编写. 用于在程序设计的过程中,为了保证程序的健壮性,我们需要 1.忽 ...

  2. myeclipse创建的项目发布不了文档

    进入MyEclipse的工作目录下/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.genuitec.eclipse.ast.dep ...

  3. UCenter创始人、Discuz!创始人、管理员账号的认知(转)

    UCenter创始人.Discuz!创始人.管理员账号的认知       什么是创始人?现在可能还有好多的站长对这个概念有点模糊,今天我给大家屡屡思路,讲讲这个概念性问题,没啥技术含量.已经明白这个概 ...

  4. 关于JqueryEasyUI插件—Tab,默认选中某个面板 如果不明显指定的话,第一个就是被选中的

    如果不明显指定的话,第一个就是被选中的,你可以通过data-options="selected:true"指定默认选中

  5. 利用BeanUtils工具类封装表单数据

    一.BeanUtils工具类的使用 1.首先导入BeanUtils工具类的jar包 commons-beanutils-1.8.0.jar commons-logging-1.1.1.jar 2.se ...

  6. CCF试题:高速公路(Targin)

    问题描述 某国有n个城市,为了使得城市间的交通更便利,该国国王打算在城市之间修一些高速公路,由于经费限制,国王打算第一阶段先在部分城市之间修一些单向的高速公路. 现在,大臣们帮国王拟了一个修高速公路的 ...

  7. git: Your branch and 'origin/master' have diverged

    git: Your branch and 'origin/master' have diverged - how to throw away local commits? - Stack Overfl ...

  8. 使用JAXB读写xml

    1.注解 在Java模型中的创建与 xml 文件对应的节点和属性需要用注解来表示 @XmlRootElement 作用:将一个Java类映射为一段XML的根节点参数:    name  定义这个根节点 ...

  9. CentOS7.5安装配置conky(极简)

    1.安装epel源 下载地址:http://dl.fedoraproject.org/pub/epel/ 找到epel-release-XXXXXXX.rpm文件,下载解压 rpm -ivh epel ...

  10. mac安装jdk1.8

    一. http://www.oracle.com/technetwork/java/javase/downloads/index.html 去jdk官网下载 二.安装 一路傻瓜式安装,下一步下一步 三 ...