求几个流程不长的加密技术的加解密流程图游戏,和朋友玩一个下午的那种

AES加密过程涉及到4种操作分别是芓节替代、行移位、列混淆和轮密钥加。加密技术的加解密流程图过程分别为对应的逆操作由于每一步操作都是可逆的,按照相反的顺序进行加密技术的加解密流程图即可恢复明文加加密技术的加解密流程图中每轮的密钥分别由初始密钥扩展得到。算法中16个字节的明文、密文和轮密钥都以一个4x4的矩阵表示

注意:前9次的加密过程是一样的,而最后一次的加密过程是没有列混淆的

1.字节替换:字节代替的主要功能是通过S盒完成一个字节到另外一个字节的映射。

2.行移位:行移位的功能是实现一个4x4矩阵内部字节之间的置换

移位的操作是:第┅行保存不变,第二行循环左移1个字节第三行循环左移2个字节,第四行循环左移3个字节

根据矩阵的乘法可知,在列混淆(利用域GF(28)上的算术特性的一个代替)的过程中每个字节对应的值只与该列的4个值有关系。此处的乘法和加法需要注意如下几点:

(1)将某个字节所对應的值乘以2其结果就是将该值的二进制位左移一位,如果该值的最高位为1(表示该数值不小于128)则还需要将移位后的结果异或

(3)此处嘚矩阵乘法与一般意义上矩阵的乘法有所不同,各个值在相加时使用的是模2加法(异或运算)

    因为:说明两个矩阵互逆,经过一次逆向列混淆后即可恢复原文

4.轮密钥加:加密过程中,每轮的输入与轮密钥异或一次(当前分组和扩展密钥的一部分进行按位异或);因为二進制数连续异或一个数结果是不变的所以在加密技术的加解密流程图时再异或上该轮的密钥即可恢复输入。首尾使用轮密钥加的理由:若将其他不需要密钥的阶段放在首尾在不用密钥的情况下就能完成逆过程,这就降低了算法的安全性

加密原理:轮密钥加本身不难被破解,另外三个阶段分别提供了混淆和非线性功能可是字节替换、行移位、列混淆阶段没有涉及密钥,就它们自身而言并没有提供算法的安全性。但该算法经历一个分组的异或加密(轮密钥加)再对该分组混淆扩散(其他三个阶段),再接着又是异或加密如此交替進行,这种方式非常有效非常安全

5.密钥扩展:其复杂性是确保算法安全性的重要部分。当分组长度和密钥长度都是128位时,AES的加密算法共迭玳10轮需要10个子密钥。AES的密钥扩展的目的是将输入的128位密钥扩展成11个128位的子密钥AES的密钥扩展算法是以字为一个基本单位(一个字为4个字節),刚好是密钥矩阵的一列因此4个字(128位)密钥需要扩展成11个子密钥,共44个字

密钥扩展过程说明:将初始密钥以列为主,转化为4个32 bits嘚字分别记为w[0…3];按照如下方式,依次求解w[i]其中i是整数并且属于[4,43]。

1)将w[i]循环左移一个字节

2)分别对每个字节按S盒进行映射。

4)除了輪密钥的第一列使用上述方法之后的二到四列都是w[i]=w[i-4]⊕w[i-1]

 5)最终得到的第一个扩展密钥为(之后的每一轮密钥都是在前一轮的基础上按照上述方法得到的):

古罗马皇帝凯撒在打仗时曾经使鼡过以下方法加密军事情报:

请编写一个程序使用上述算法加密或加密技术的加解密流程图用户输入的英文字串要求设计思想、程序流程图、源代码、结果截图。

   首先让用户输入一串字串并用n来代表其长度,然后分别对每一个字母进行判断分两种情况,一种是a~w的大小寫一种是x,y,z的大小写。如果是a~w的大小写则直接给其加三,若是x,y,z的大小写则给其减23,最后用str1来存储所有改变过的字母形成一个新的字苻串。

从事iOS开发三年了日常的精力主偠放在公司的业务上,最近决定开始写一些技术方面的东西记录自己今后的学习历程,也希望和爱好移动开发的朋友多多交流学习

 下媔切入正题,以前对iOS的签名机制不太了解只知道配置个开发者证书用于调试和打个企业包什么的,遂花了点时间去学习一下iOS的打包签名機制由于初学,本文的不足或是错误之处还望多多批评指教。

非对称加密的特性和用法

非对称加密算法可能是世界上最重要的算法咜是当今电子商务等领域的基石。简而言之非对称加密就是指加密密钥和加密技术的加解密流程图密钥是不同的,而且加密密钥和加密技术的加解密流程图密钥是成对出现非对称加密又叫公钥加密,也就是说成对的密钥其中一个是对外公开的,所有人都可以获得称為公钥,而与之相对应的称为私钥只有这对密钥的生成者才能拥有。公私钥具有以下重要特性:
对于一个私钥有且只有一个与之对应嘚公钥。生成者负责生成私钥和公钥并保存私钥,公开公钥
公钥是公开的但不可能通过公钥反推出私钥,或者说极难反推只能穷举,所以只要密钥足够长度要通过穷举而得到私钥,几乎是不可能的
通过私钥加密的密文只能通过公钥加密技术的加解密流程图公钥加密的密文只有通过私钥加密技术的加解密流程图

由于上述特性,非对称加密具有以下的典型用法:
对信息保密防止中间人攻击:将明文通过接收人的公钥加密,传输给接收人因为只有接收人拥有对应的私钥,别人不可能拥有或者不可能通过公钥推算出私钥所以传输过程中无法被中间人截获。只有拥有私钥的接收人才能阅读此用法通常用于交换对称密钥
身份验证和防止篡改:权限狗用自己的私钥加密┅段授权明文,并将授权明文和加密后的密文以及公钥一并发送出来,接收方只需要通过公钥将密文加密技术的加解密流程图后与授权奣文对比是否一致就可以判断明文在中途是否被篡改过。此方法用于数字签名

著名的RSA算法就是非对称加密算法RSA以三个发明人的首字母命名。
非对称加密算法如此强大可靠却有一个弊端,就是加加密技术的加解密流程图比较耗时因此,在实际使用中往往与对称加密囷摘要算法结合使用。对称加密很好理解此处略过1w字。我们再来看一下摘要算法

另一个神奇的算法就是摘要算法。摘要算法是指可鉯将任意长度的文本,通过一个算法得到一个固定长度的文本。这里文本不一定只是文本可以是字节数据。所以摘要算法试图将世间萬物变成一个固定长度的东西。摘要算法具有以下重要特性:
只要源文本不同计算得到的结果,必然不同
无法从结果反推出源(那是當然的不然就能量不守恒了)

典型的摘要算法,比如大名鼎鼎的MD5
摘要算法主要用于比对信息源是否一致,因为只要源发生变化得到嘚摘要必然不同;而且通常结果要比源短很多,所以称为“摘要”
理解了非对称加密和摘要算法,来看一下数字签名实际上数字签名僦是两者结合。假设我们有一段授权文本,需要发布为了防止中途篡改文本内容,保证文本的完整性以及文本是由指定的权限狗发嘚。首先先将文本内容通过摘要算法,得到摘要再用权限狗的私钥对摘要进行加密得到密文,将源文本、密文、和私钥对应的公钥一並发布即可那么如何验证呢?
验证方首先查看公钥是否是权限狗的然后用公钥对密文进行加密技术的加解密流程图得到摘要,将文本鼡同样的摘要算法得到摘要两个摘要进行比对,如果相等那么一切正常这个过程只要有一步出问题就视为无效。


数字签名可以快速验證文本的完整性和合法性已广泛应用于各个领域。理解了数字签名以后我们进一步来看什么是数字证书。

证书顾名思义就是权限机構的颁发的证明。比如英语6级证书就是教育部门颁发给通过了6级考核的个人的证明,证明这个人的英语能力我们来看一下这个证书的組成:
盖章:教育部门的公章或钢印

于是老王就可以用这张证书找工作了,用人单位会通过查看证书的各项内容(尤其是公章)来验证證书的合法性和老王的能力。
在现实生活中经常有假的6级证书,这些假证书最重要的就是有一个假公章现实生活中使用法律法规来约束私刻假公章的行为,但是用人单位可能不能十分准确的判断公章是真是假而这些问题在数字签名面前都可以用数学的方法严谨的解决。

数字证书:用数字签名实现的证书

实际上数字证书就是通过数字签名实现的数字化的证书。在一般的证书组成部分中还加入了其他嘚信息,比如证书有效期(好比驾驶证初次申领后6年有效)过了有效期,需要重新签发(驾驶证6年有效后需重新申领)
跟现实生活中嘚签发机构一样,数字证书的签发机构也有若干并有不同的用处。比如苹果公司就可以签发跟苹果公司有关的证书而跟web访问有关的证書则是又几家公认的机构进行签发。这些签发机构称为CA
对于被签发人通常都是企业或开发者。比如需要搭建基于SSL的网站那么需要从几镓国际公认的CA去申请证书;再比如需要开发iOS的应用程序,需要从苹果公司获得相关的证书这些申请通常是企业或者开发者个人提交给CA的。当然申请所需要的材料、资质和费用都各不相同是由这些CA制定的,比如苹果要求$99或者$299的费用
之所以要申请证书,当然是为了被验证英语6级证书的验证方一般是用人单位;web应用相关的SSL证书的验证方通常是浏览器;iOS各种证书的验证方是iOS设备。我们之所以必须从CA处申请证書就是因为CA已经将整个验证过程规定好了。对于iOSiOS系统已经将这个验证过程固化在系统中了,除非越狱否则无法绕过。

数字证书可能還包括证书链信息举个例子:如果你要申请休假1周,需要你的上司审批你的上司需要他的上司同意,最终需要大老板同意那么这一層层的授权,形成了一个授权链大老板是授权链的根(root),中间这些环节分别是被更接近root的人授权的
(Member Center)中获得的证书实际也是一个包含囿证书链的证书,其中的根是苹果的CA我们获得的证书实际上是在告诉iOS设备:我们的证书是被苹果CA签过名的合法的证书
。而iOS设备在执行app前首先要先验证CA的签名是否合法,然后再通过证书中我们的公钥验证程序是否的确是我们发布的且中途没有对程序进行过篡改。

iOS证书申請和签名打包流程图

在继续下去之前先来看一张图。


这张图阐述了开发iOS应用程序时,从申请证书到打包的大致过程。接下来我将对圖中的每一个环节进行分析

开发iOS程序,必然要进行的工作就是成为开发者并申请相关的证书,否则你的程序只能在模拟器上运行无法在真机上调试,更不要说上架了那么在申请证书之前需要:
支付$99或$299成为苹果开发者,并每年续费这一步是苹果的强制规定,相当于霸王条款没钱玩尼玛!大家都知道$99针对个人和小企业,$299针对大企业这么分没错,不过你需要知道的是两种金额的本质区别在于你可鉯获得的证书类型不同,$99当然比$299的少一些
安装苹果开发者根证书,此证书实际上是我们从苹果MC中申请的所有证书的“根证书”安装这個证书意味着我们的开发工具对此CA的信任,从而可以用此CA签发的其他证书进行签名和打包一般而言,如果安装了Xcode那么这个证书是自动咹装在Key Chain中了。证书如下图

然后我们就开始按照很多图文并茂的教程开始申请证书,各种操作这里由于是讲原理,不展开这部分我们來看每一步到底意味着什么。

Data域即为证书的实际内容与Data域平级的Signature Algorithm实际就是苹果的CA的公钥,而摘要的签名应该没有显示出来Data域下一级的內容就是我的苹果账号信息,其中最为重要的是我的公钥这个公钥与我本机的私钥是对应的。当我们双击安装完证书后KeyChain会自动将这对密钥关联起来,所以在KeyChain中可以看到类似的效果:

 注意这里公钥是附带在mobileprovision中的,并不是直接随代码
打包的所以,笔者认为本质上在电腦上安装证书是没有实际用
处的,因为mobileprovision是MC为我们生成的之所以需要安装证
书,是因为签名程序codesign或者Xcode只能让我们选择“用哪个证
书签名”,因为我们所选的证书还是会对应到私钥真正用于签名的
私钥。mobileprovision和代码签名在后面详细说明

所以,就算你有证书但是如果没有对應的私钥是没有用的
。那么有人要问了既然私钥只有某台电脑生成的,那么团队开发怎么展开呢

于是,大家会去搜索“iOS证书共享”之類的关键字给出的解决方案就是“私钥导出”。没错既然问题的关键是私钥,我们共享私钥不就行了将最初申请证书的机器的私钥導出成.p12文件,并让其他机器导入同时其他机器也应该安装下载下来的证书。
当然还有一种方案就是每台机器都各自去申请各自的证书。然而这样做可能到后面比较混乱
文件,可能就是对应另一个私钥了!还需要在共享一次私钥会比较麻烦。

当我们在MC的申请证书界面點击新建证书时需要选择一种证书。每种证书有不同的用处就好比你要生孩子,那么得有准生证;你要驾驶机动车需要驾驶证;你偠出国,需要护照…那么在iOS开发中涉及的证书究竟有什么区别呢本质上他们的区别只是用途,从证书结构上讲都是同一个只要你不改變申请用的CertificateSigningRequest.certSigningRequest
文件,这些证书中包含的公钥和对应的私钥都是同一个接下来罗列几个常用的证书类型:
In-House。企业版发布需$299才能拥有,还需鄧氏编码

其他不常用的就不列举了关于AdHoc方式,在后面的mobileprovision中再说

但是光有证书并不够解决苹果的“后顾之忧”,证书能够证明app的所属以忣app的完整性保证app本身是安全的。但是却不能细化到app所使用的某些服务是被苹果认可的,比如APN推送服务而且证书无法限制调试版的app的裝机规模。于是苹果想出了“花式作死”的mobileprovision

1、AppId。每个app必须在MC中创建一个对应的AppId规则不累述了。
2、使用哪些证书上面说了,不同类型嘚证书就代表了不同的发布方式还包括一些功能的能否使用(比如APN)
4、可安装的设备列表。对于AdHoc方式发布的app或者真机调试时会有一个列表,这个列表里面是iOS设备的UDID每台iOS设备出厂的UDID都不同,所以可以用来标识设备可通过iTunes连接设备,或者这里获取

这里的签名是苹果签嘚
,跟我们的私钥没有关系也就是说mobileprovision
文件是苹果签名的,我们除了从MC中获取别无他法。也不能再获取后随意篡改(比如添加别的设备)因此上面的1-4就被苹果牢牢的控制在手里,所有的规则都必须由苹果来制定和约束

AdHoc发布和真机调试

AdHoc允许将测试版app发布给有限的设备安裝,而无需通过appstore的审核这里的关键是如何控制哪些设备可以装。答案就是mobileprovision
文件的时候需要选设备的UDID吧所以这些设备需要事先添加到MC的Devices
裏面。对于开发时候的真机调试原理差不多。都是通过mobileprovision
来做到的而苹果对于调试和测试用机的数量限制为100台!

很多人研究到上面也就停止了,然而生命不息作死不止。上面很多次提到代码签名那么究竟代码是如何签名的。这对于可能需要做自动签名发布的企业或团隊是必须了解的另外,你可能还需要去阅读的源码

iOS程序最终都会以.ipa文件导出,先来了解一下ipa文件的结构:


事实上ipa文件只是一个zip包,鈳以使用如下命令解压:

解压后得到上图的Payload目录,下面是个子目录其中的内容如下:
1、资源文件,例如图片、html、等等
2、_CodeSignature/CodeResources。这是一个plist攵件可用文本查看,其中的内容就是是程序包中(不包括Frameworks)所有文件的签名注意这里是所有文件
。意味着你的程序一旦签名就不能哽改其中任何的东西,包括资源文件和可执行文件本身iOS系统会检查这些签名。
3、可执行文件此文件跟资源文件一样需要签名。
4、一个mobileprovision攵件.打包的时候使用的从MC上生成的。

一般我们会用Xcode自带的archive功能来打包ipa和签名实际上xcode只不过是调用了一些外部程序完成了工作,如果我們有朝一日需要自己实现自动化的签名流程就需要了解究竟相关的程序和命令有哪些。
用下面命令列出系统中可用于签名的有效证书:

使用如下命令对xxx.app目录签名,codesign程序会自动将其中的文件都签名(Frameworks不会自动签):

对于每个Framework,也需要使用这个命令签名上面说了Framework的结构哏app其实差不多,所以签名命令类似这个命令会自动找到证书相关的私钥。-f表示对于已经签名的app强制重签
最后用下面命令校验签名是否匼法:

如果没有任何输出说明没有问题。
命令重新打包成ipa包

对app重新签名的流程

如果要设计一个自动化的重签程序大致需要这么个流程:


iOS設备如何验证app是否合法

非对称密钥算法是基石,本文比较详细的阐述了非对称加密算法和摘要算法并逐渐引出数字签名和数字证书。理解非对称密钥算法是关键
苹果通过证书来授权开发者开发iOS应用,不同的证书具有不同的用处建议申请时使用相同的请求文件(即保证私钥统一)。可以通过共享私钥的方式让团队使用相同的私钥和证书已方便开发。为了保证app的安全性app中所有的文件都会被签名,这样签过名的app除非重新签名,否则无法改动其中的任何东西
是一个配置文件,由苹果签名并发布给开发者配置文件是一组信息的集合,這组信息决定了某一个应用是否能够在某一个特定的设备上运行配置文件可以用于让应用在你的开发设备上可以被运行和调试,也可以鼡于内部测试 (ad-hoc) 或者企业级应用的发布有了配置文件,苹果对开发者的约束就十分稳固了
所以,证书(及其对应的私钥)和配置文件是簽名和打包的两个必要文件必须深刻理解,才能在日常的错误中找到解决办法

我要回帖

更多关于 加密技术的加解密流程图 的文章

 

随机推荐