iOS -- DES算法

算法步骤:

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 @"";

}
时间: 2024-10-02 17:58:28

iOS -- DES算法的相关文章

DES算法详解

本文主要介绍了DES算法的步骤,包括IP置换.密钥置换.E扩展置换.S盒代替.P盒置换和末置换. 1.DES算法简介 DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准. DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法. 密钥长64位,密钥事实上是56位参与DES运算(第8.16.24.32.40.48.56.64位是校验位,使得每个密钥都有奇数个1),分组后的明文组和56位的密钥按位替代或交换的方法形成密文组. DES算法的主要流程如下图

【转】 iOS DES ECB模式对称加密解密

最近忙于android和iOS的项目,写完了android的DES 的ECB模式加密解密(相关连接:http://blog.csdn.net/vipa1888/article/details/8086037),又 回到了Ios上面,因为本人也是最近今年开始研究ios的,所以Ios上面好多东西都不懂,进过了半年的研究,终于吧ios的DES 的ECB模式对称加密解密搞定了,本人遇到的问题很严重的问题,网上写的好多16进制数转化位字节都有问题的,经过本人研究发现他们有一个地方写错了,导 致解密后的NS

wex5 实战 加密与解密系列(1) DES算法引入与调用

作为web前端应用来说,与服务器通讯或后端通讯,以及不同用户间传递数据,在一些特定情况下需要对一些信息进行加密传输,在某个事件中取出信息并解密,得到正确的信息.纵观不同语言和不同算法,有很多种选择.今天,从最基础的加密与解密算法DES说起,深入浅出,看看wex5如何简单高效的实现DES算法加密与解密.便于课程需要,制作了demo,及js改装注释. 一 效果演示 如图所示,加密,生成一堆乱码,解密还原得到正确信息. 二 设计思路 制作并引入des.js文件,前端直接调用js方法实现加密解密. 三

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

又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮! 转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有个家(毕竟年级不小了),有盼头的工作前景. 看到老赵和老跳两位前辈的故事,真实且现实,同时也有一丢丢的小迷茫,敢问路在何方! 感叹一会儿,生命不止,Code不止,继续入坑! 昨天分享了一下非对称加密RSA算法,今天给朋友们分享一下对称加密DES算法案例. 加解密过程: 1.生成加密密钥key,密码越

DES算法解析

DES算法  美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告. 1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES,Data Encryption Standard). 一.DES算法 美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算

DES算法详解与源码

网上关于DES算法的讲述有很多,大致思路一致.但是很多细节的处理上没有交代清楚,源码质量也参差不齐,为此也花了很多时间研究了一下,现在把完整思路和源码整理如下. 1. DES算法简介: DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法. 明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8.16.24.32.40.48.56.64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或

ios Swift 算法

// Playground - noun: a place where people can play import Cocoa var nums = Int[]() for _ in 1...50 { nums.append(random()) } nums ////冒泡排序 /* var count = 0; for(var i = 0 ; i < nums.count-1; i++){ for(var j = 0; j < nums.count-i-1;j++){ count++; if

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

本文主要介绍了DES算法的步骤,包括IP置换.密钥置换.E扩展置换.S盒代替.P盒置换和末置换. 安全体系(零)-- 加解密算法.消息摘要.消息认证技术.数字签名与公钥证书 安全体系(二)--RSA算法详解 安全体系(三)--SHA1算法详解 1.DES算法简介 DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准. DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法. 密钥长64位,密钥事实上是56位参与DES运算(第8.16.24.32.40

javacard DES算法API使用示例

很多时候我们并不需要自己去实现一个较为复杂的算法,而只需要知道怎么去调用现有的实现.API调用,在C/C++是用include+函数的形式,java其实也无非就是import+类(方法.变量)的形式,其他语言的也差不多,例如web里面的前端框架,所谓框架其实就是一堆别人已经写好的代码,你拿去用,然后继续在上面填充自己的代码,说到底其实就是代码复用.而在java这里,因为以.class文件的形式封装了实现,我们看到的接口:一堆.class文件里面方法的具体实现被隐藏了,只能看到个函数原型,所以调用