iOS DES加密与3DES加密

最近项目中遇到了加解密的问题,然后翻阅了相关资料,成功搞定。 现在将这些知识点总结一下,一是为了以后复习,二是为了给大家提供参考。


1.  先来说说DES操作,定义我这里就不叙述了,网上一堆一堆的。接下来说一下使用时应该注意的几点。 首先,大家要分清Key(密钥),Data(待操作数据)跟Mode(加密模式)。其中Key必须为8字节(64位),Data需要是8字节(64位)的倍数,这里需要注意了,如果Data不是8字节的倍数,那么我们需要进行数据填充,数据填充使用的算法不一定相同。Mode貌似有许多种,这里只简单的说一下ECB跟CBC模式。

ECB模式:将待处理的数据分成若干块,每块的长度都为8字节(64位),与Key长度相同。然后对每块进行加密或解密,最后将他们连接在一起便是最终的结果。每一块的数据互不干扰。

CBC模式:也需要将待处理的数据分块,但是每一块数据在加密或者解密之前都要与前一块的结果做一次异或操作,因此该模式需要定义一个特殊的8字节Key,用于和第一块数据做异或操作。这个特殊的Key就是通常说的初始化向量。在代码中书写时需要配置iv参数,注意iv参数是对应CBC模式的。这样一来,每一块数据都是有联系的,这是与ECB模式不同的一点。


2. 再来说说3DES操作,也就是进行3次DES操作。设Ek()和Dk()分别代表DES算法的加密和解密过程,k代表DES算法使用的密钥,P代表明文,C代表密文,则3DES算法的过程可表示为:

C = Ek3(Dk2(Ek1(P)))

P = Dk1(Ek2(Dk3(C)))

3DES同样有ECB跟CBC模式,同上面讲的一样。这里需要注意一下Key的长度,应该是24位。比如我们已知的Key是16位的,那么我们需要将其分为2段,每一段都是8位,则k1=左8位, k2=右8位,k3=左8位,也就是  k1=k3,但不能k1=k2=k3,因为如果每段使用的Key都相同,就回到DES算法了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: iOS开发可以使用AVPlayer来播放加密的m3u8视频。首先,需要获取加密m3u8视频的URL地址。然后,可以使用AVAsset来创建一个播放资源对象,通过指定URL地址初始化AVURLAsset对象,如下所示: ``` NSURL *url = [NSURL URLWithString:@"加密m3u8视频的URL地址"]; AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil]; ``` 接下来,可以创建一个AVPlayerItem对象,将asset设置为其参数,用于加载加密m3u8视频资源。同时,需要为AVAsset设置相应的解密密钥,以解密加密的m3u8视频,代码如下: ``` // 创建AVPlayerItem对象 AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset]; // 设置解密密钥,以解密加密m3u8视频 NSData *keyData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"密钥URL地址"]]; NSDictionary *encryptionInfo = @{AVAssetResourceLoadingRequestStreamingContentKeyRequestRequiresPersistentKey: @NO, AVAssetResourceLoadingRequestStreamingContentKeyRequestRequiresExternalization: @NO, AVAssetResourceLoadingRequestStreamingContentKeyRequestInitializationData: keyData}; [playerItem setExternalProtectionStatusDelegate:self queue:dispatch_get_main_queue()]; [playerItem setResourceLoaderDelegate:self queue:dispatch_get_main_queue()]; [playerItem setInitializationData: @[encryptionInfo] forAsset:asset]; ``` 最后,可以使用AVPlayer来播放加密的m3u8视频,代码如下: ``` AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem]; AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player]; playerLayer.frame = self.view.bounds; [self.view.layer addSublayer:playerLayer]; [player play]; ``` 通过以上步骤,就可以在iOS开发中通过AVPlayer来播放加密的m3u8视频。同时,还需要实现相关的代理方法来处理密钥请求和解密操作,以确保视频播放正常。 ### 回答2: iOS开发中,播放加密m3u8需要进行以下步骤。 首先,我们需要获取加密m3u8文件的url地址,并进行网络请求,获取到m3u8文件的内容。可以使用NSURLConnection或者NSURLSession来进行网络请求。 接下来,我们需要解析m3u8文件的内容,找到其中的加密信息。一般来说,加密信息是包含在EXT-X-KEY标签中的。可以使用正则表达式或者解析库来提取加密信息。 获取到加密信息之后,我们需要下载加密的密钥(key文件)。可以使用NSURLSession来进行密钥的网络请求,并将密钥保存到本地。 接着,我们需要将下载的加密的密钥设置到AVAssetResourceLoaderDelegate的代理方法中。通过实现AVAssetResourceLoaderDelegate的方法,我们可以对资源的请求进行拦截,并替换成解密后的数据。在这个方法中,我们需要解密每个ts文件的内容,然后将解密后的数据返回给播放器进行播放。 最后,我们将解密后的数据传递给AVPlayer,用AVPlayer来进行播放。我们可以使用AVPlayerItem和AVPlayer来创建一个播放器,然后将解密后的数据设置给AVPlayerItem,最后将AVPlayerItem设置给AVPlayer。 综上所述,播放加密m3u8文件需要进行加密信息解析、密钥下载和解密处理等步骤。通过以上步骤,我们可以在iOS开发中实现播放加密m3u8文件的功能。 ### 回答3: iOS开发中要播放加密的m3u8文件,可以借助AVFoundation框架来实现。以下是一个简单的实现步骤: 首先,需要将m3u8文件下载到本地,并解析得到m3u8文件中的密钥以及ts片段的URL。 然后,借助AVAssetResourceLoaderDelegate协议,自定义一个资源加载器,用于处理加密文件的逻辑。在该协议的代理方法中,先判断是否需要加载加密密钥,并根据m3u8文件中的密钥信息,将其加载到AVAssetResourceLoader中。 接下来,当AVPlayer需要加载排队的媒体数据时,资源加载器会被调用。在这个代理方法中,我们需要处理对ts片段的加载请求,通过AVAssetResourceLoadingDataRequest的requestRange属性可以得到要加载的范围,然后根据范围从本地缓存中读取对应的加密ts片段数据进行解密,再通过AVAssetResourceLoadingDataRequest的respond方法回传给AVPlayer。 最后,将AVPlayer与AVPlayerLayer绑定,通过AVPlayer的play方法来开始播放加密的m3u8文件。 需要注意的是,由于涉及到解密操作,所以在自定义资源加载器中,我们需要实现对ts片段数据的解密逻辑,通常使用AES加密算法进行解密。 综上所述,通过借助AVFoundation框架的AVAssetResourceLoaderDelegate协议和自定义资源加载器,我们可以实现在iOS开发中播放加密的m3u8文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值