欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    毕业设计(论文)分组密码算法DES的加密和解密的实现.doc

    • 资源ID:3996169       资源大小:1.28MB        全文页数:54页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    毕业设计(论文)分组密码算法DES的加密和解密的实现.doc

    分组密码算法DES的加密和解密的实现摘 要随着信息社会的到来,人们在享受信息资源所带来的巨大的利益的同时,也面临着信息安全的严峻考验。信息安全已经成为世界性的现实问题,信息安全问题已威胁到国家的政治、经济、军事、文化、意识形态等领域,同时,信息安全问题也是人们能否护自己的个人隐私的关键。信息安全是社会稳定安全的必要前提条件。 本文是一篇讨论关于常用文件加密解密算法的毕业设计论文,它详细的讲述了文件加密解密算法实现的过程中所用到的方法、技术。关键词:解密,文件加密,密码体制,DES 英文摘要ABSTRACTWith the advent of the information society, people in the enjoyment of information resources brought about tremendous benefits, but also faced with a letter Income security, a severe test. Information security has become a worldwide reality, information security has been a threat to the country's political .Governance, economic, military, cultural, ideological and other areas at the same time, the issue of information security is also a possibility of retaining their own personal Privacy key. Information security and social stability is a necessary precondition for security.   This article is a discussion paper on encryption and decryption algorithms commonly used in graduate design thesis, which documents in detail about the encryption and decryption process of algorithm used in the methods and techniques. Key words: Decryption,file encryption, cryptosystem, DES目 录前 言1第1章 概 述21.1 加密与解密21.2 单钥密码系统21.3 分组密码的总体结构31.4分组密码的安全性4第2章 DES算法简介52.1简介52.2 DES加密标准62.2.1 初始置换IP72.2.2 IP-1是IP的逆置换72.2.3 DES算法的迭代过程82.2.4 子密钥的生成122.3 DES算法的解密过程13第3章 DES算法用C+语言实现143.1设置密钥函数des_setkey()143.2 f函数和S函数f_func()和s_func()143.3 DES算法的运行函数des_run( )163.4 DES算法的主函数void main()183.5 DES的加密过程和举例193.6 DES算法的分析21 22结 论23参考文献24致 谢25附 录26前 言密码学是伴随着战争发展起来的一门科学,其历史可以追溯到古代,并且还有过辉煌的经历。但成为一门学科则是近20年来受计算机科学蓬勃发展的刺激结果。今天在计算机被广泛应用的信息时代,信息本身就是时间,就是财富。如何保护信息的安全(即密码学的应用)已不再局限于军事、政治和外交,而是扩大到商务、金融和社会的各个领域。特别是在网络化的今天,大量敏感信息(如考试成绩、个人简历、体检结果、实验数据等)常常要通过互联网进行交换。(现代电子商务也是以互联网为基础的。)由于互联网的开放性,任何人都可以自由地接入互联网,使得有些不诚实者就有可能采用各种非法手段进行破坏。因此人们十分关心在网络上交换信息的安全性。普遍认为密码学方法是解决信息安全保护的一个最有效和可行的方法。有效是指密码能做到使信息不被非法窃取,不被篡改或破坏,可行是说它需要付出的代价是可以接受的。密码是形成一门新的学科是在20世纪70年代。它的理论基础之一应该首推1949年Shannon的一篇文章“保密系统的通信理论”,该文章用信息论的观点对信息保密问题作了全面的阐述。这篇文章过了30年后才显示出它的价值。1976年,Diffie和Hellman发表了论文密码学的新方向,提出了公钥密码体制的新思想,这一思想引发了科技界对研究密码学的极大兴趣,大量密码学论文开始公开发表,改变了过去只是少数人关起门来研究密码学的状况。同时为了适应计算机通信和电子商务迅速发展的需要,密码学的研究领域逐渐从消息加密扩大到数字签名、消息认证、身份识别、抗欺骗协议等新课题。 美国国家标准局(NBS)1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,并批准用于非机密单位及商业上的保密通信。于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告。1977年1月,美国政府颁布:采用IBM公司1971年设计出的一个加密算法作为非机密数据的正式数据加密标准(DES : Data Encryption Standard)。DES广泛应用于商用数据加密,算法完全公开,这在密码学史上是一个创举。在密码学的发展过程中,DES算法起了非常重要的作用。本次学年论文介绍的就是分组加密技术中最典型的加密算法DES算法。第1章 概 述1.1 加密与解密加密技术是基于密码学原理来实现计算机、网络乃至一切信息系统安全的理论与技术基础。简单的说,加密的基本意思是改变信息的排列形式,使得只有合法的接受才能读懂,任何他人即使截取了该加密信息也无法使用现有的手段来解读。解密是我们将密文转换成能够直接阅读的文字(即明文)的过程称为解密,它是加密的反向处理,但解密者必须利用相同类型的加密设备和密钥对密文进行解密。1.2 单钥密码系统密码学中有两种重要类型的密码系统,单钥(私钥)和双钥(公钥)密码系统。在单钥密码系统中,明文的加密和密文的解密是用同样的密钥。直到1976年Diffie、Hellman引入公钥(双钥)密码学之前,所有的密码都是单钥系统,因此单钥系统也称为传统密码系统。传统密码系统广泛地用在今天的世界上,有两种单钥密码体制:流密码和分组密码。流密码是利用密钥k产生一个密钥流z=z0z1,并使用如下规则对明文串x=x0x1x2加密: y=y0y1y2=Ez0(x0)Ez1(x1)Ez2(x2)。密钥流由密钥流发生器f产生: zi=f(k,i),这里i是加密器中的记忆元件(存储器)在时刻i的状态,f是由密钥k和i产生的函数。而分组密码就是将明文消息序列:m,m,m,划分为等长的消息组(m,m,m),(m,m,m),各组明文分别在密钥k=(k1,k2,kt)的控制下,按固定的算法E一组一组进行加密。加密后输出等长密文组(y,y),(y,y),分组密码的模型,如图1.1所示。图1.1 分组密码的模型它与流密码的不同之处在于输出的每一位数字不只与相应时刻输入明文数字有关,而是与一组长为m的明文数组有关。它们的区别就在于有无记忆性(如图1.2)。流密码的滚动密钥z0=f(k,0)由函数f、密钥k和指定的初态0完全确定。此后,由于输入加密器的明文可能影响加密器中内部记忆元件的存储状态,因而i(i>0)可能依赖于k,0,x0,x1,xi-1等参数。图1.2流密码与分组密码的区别分组密码的优点在于其容易实现同步,因为一个密文组的传输错误不会影响其他组,丢失一个明密文组不会对其后的组的解密正确性带来影响。分组密码又分为三类:代替密码(Substitution)、移位密码(Transposition)和乘积密码。随着计算技术的发展,早期的代替和移位密码已无安全可言。一个增加密码强度的显然的方法是合并代替和移位密码,这样的密码称为乘积密码。如果密文是由明文运用轮函数多次而得,这样的乘积密码又称为迭代分组密码。DES和今天的大多数分组密码都是迭代分组密码。目前著名的对称分组密码系统算法有DES、IDEA、Blowfish、RC4、RC5、FEAL等。1.3 分组密码的总体结构分组密码采用两种类型的总体结构:SP网络与Feistel网络,它们的主要区别在于:SP结构每轮改变整个数据分组,而Feistel密码每轮只改变输入分组的一半。AES和DES分别是这两种结构的代表。Feistel网络(又称Feistel结构)可把任何轮函数转化为一个置换,它是由Horst Feistel在设计Lucifer分组密码时发明的,并因DES的使用而流行,“加解密相似”是Feistel型密码的实现优点。SP网络(又称SP结构)是Feistel网络的一种推广,其结构清晰,S一般称为混淆层,主要起混淆作用,P一般称为扩散层,只要起扩散作用。SP网络可以更快速的扩散,不过SP网络的加解密通常不相似。1.4分组密码的安全性安全性是分组密码最重要的设计原则,它要求即使攻击者知道分组密码的内部结构,仍不能破译该密码,这也意味着,不存在针对该密码的某种攻击方法,其工作量小于穷密钥搜索。但是随着密码分析技术的发展,使得对于具有更多轮的分组密码的破译成为可能。第2章 DES算法简介2.1简介DES是Data Encryption Standard(数据加密标准)的缩写。它是由IBM公司在1971年设计出的一个加密算法,美国国家标准局(NBS)于1977年公布把它作为非机要部门使用的数据加密标准5。 DES自从公布以来,已成为金融界及其他各种行业最广泛应用的对称密钥密码系统。DES是分组密码的典型代表,也是第一个被公布出来的标准算法。原来规定DES算法的使用期为10年,可能是DES尚未受到严重威胁,更主要是新的数据加密标准研制工作尚未完成,或意见尚未统一,所以当时的美国政府宣布延长它的使用期。因而DES超期服役到2000年。近三十年来,尽管计算机硬件及破解密码技术的发展日新月异,若撇开DES的密钥太短,易于被使用穷举密钥搜寻法找到密钥的攻击法不谈,直到进入20世纪90年代以后,以色列的密码学家Shamir等人提出一种“差分分析法”,以后日本人也提出了类似的方法,这才称得上对它有了攻击的方法。严格地说Shamir的“差分分析法”也只是理论上的价值。至少到目前为止是这样,比如后来的“线形逼迫法”,它是一种已知明文攻击,需要2434.398×1012个明、密文对,在这样苛刻的要求下,还要付出很大的代价才能解出一个密钥。不管是差分攻击还是线性攻击法,对于DES的安全性也仅仅只做到了“质疑”的地步,并未从根本上破解DES。也就是说,若是能用类似Triple-DES或是DESX的方式加长密钥长度,仍不失为一个安全的密码系统。早在DES提出不久,就有人提出造一专用的装置来对付DES,其基本思想无非是借用硬件设备来实现对所有的密钥进行遍历搜索。由于电子技术的突飞猛进,专门设备的造价大大降低,速度有质的飞跃,对DES形成了实际的威胁。DES确实辉煌过,它的弱点在于专家们一开始就指出的,即密钥太短。美国政府已经征集评估和判定出了新的数据加密标准AES以取代DES对现代分组密码理论的发展和应用起了奠基性的作用,它的基本理论和设计思想仍有重要参考价值。2.2 DES加密标准现如今,依靠Internet的分布式计算能力,用穷举密钥搜索攻击方法破译已成为可能。数据加密标准DES已经达到它的信任终点。但是作为一种Feistel加密算法的例子仍然有讨论的价值。DES是对二元数字分组加密的分组密码算法,分组长度为64比特。每64位明文加密成64位密文,没有数据压缩和扩展,密钥长度为56比特,若输入64比特,则第8,16,24,32,40,48,56,64为奇偶校验位,所以,实际密钥只有56位。DES算法完全公开,其保密性完全依赖密钥。它的缺点就在于密钥太短。设明文串m=m1m2m64;密钥串k=k1k2k64。在后面的介绍中可以看到k8,k16,k24,k32,k40,k48,k56,k64实际上是不起作用的。DES的加密过程可表示为:DES(m)= IP-1T16·T15T2·T1·IP(m).下面是完全16轮DES算法框图:图2.1 完全16轮DES算法2.2.1 初始置换IP初始置换是将输入的64位明文分为8个数组,每一组包括8位,按1至64编号。IP的置换规则如下表:表2.1 IP置换规则58504234261810 260524436282012 462544638302214 664564840322416 8574941332517 9 159514335271911 361534537292113 563554739312315 7即将输入的第58位换到第1位,第50位换到第2位,依次类推,最后一位是原来的第7位。2.2.2 IP-1是IP的逆置换由于第1位经过初始置换后,已处于第40位。逆置换就是再将第40位换回到第1位。逆置换规则如下表所示:表2.2 IP-1置换40848165624643239 747155523633138 646145422623037 545135321612936 444125220602835 343115119592734 242105018582633 141 949175725初始置换IP及其逆置换IP-1并没有密码学意义,因为置换前后的一一对应关系是已知的。它们的作用在于打乱原来输入明文的ASC码字划分的关系,并将原来明文的第位m8,m16,m24,m32,m40,m48,m56,m64位(校验位)变成IP的输出的一个字节。2.2.3 DES算法的迭代过程 图2.2 DES算法的迭代过程图图中Li-1和Ri-1分别是第i-1次迭代结果的左右两部分,各32比特。即Li=Ri-1, Ri=Li-1  f(Ri-1,ki)。其中轮密钥Ki为48比特,函数F(R,K)的计算过程如图1.5所示。轮输入的右半部分R为32比特,R首先被扩展成48比特,扩展过程由表3定义,其中将R的16个比特各重复一次。扩展后的48比特再与子密钥Ki异或,然后再通过一个S盒,产生32比特的输出。该输出再经过一个由表4定义的置换,产生的结果即为函数F(R,K)的输出。表2.3 扩展E32 1 2 3 4 5 4 5 6 7 8 9 8 9101112131213141516171617181920212021222324252425262728292829303132 1ki是由64比特的初始密钥(亦称种子密钥)导出的第i轮子密钥,ki是48比特DES算法的关键是f(Ri-1,ki)的功能,其中的重点又在S-盒(Substitution Boxes)上。F函数的输出是32比特。图2.3 F函数计算过程图将R经过一个扩展运算E变为48位,记为E(R)。计算E(R)K=B,对B施行代换S,此代换由8个代换盒组成,即S-盒。每个S-盒有6个输入,4个输出,将B依次分为8组,每组6位,记B= B1B2B3B4B5B6B7B8其中Bj作为第j个S-盒的输入,其输出为Cj,C= C1C2C3C4C5C6C7C8就是代换S的输出,所以代换S是一个48位输入,32位输出的选择压缩运算,将结果C再实行一个置换P(表4),即得F(R,K)。其中,扩展运算E与置换P主要作用是增加算法的扩散效果。S-盒是DES算法中唯一的非线性部件,当然也就是整个算法的安全性所在。它的设计原则与过程一直因为种种不为人知的因素所限,而未被公布出来。S-盒如下表:表3.4 S-盒函数S114 413 1 21511 8 310 612 5 9 0 7 015 7 414 213 110 61211 9 5 3 8 4 114 813 6 2111512 9 7 310 5 01512 8 2 4 9 1 7 511 31410 0 613S215 1 814 611 3 4 9 7 21312 0 510 313 4 715 2 81412 0 110 6 911 5 014 71110 413 1 5 812 6 9 3 21513 810 1 315 4 211 6 712 0 514 9S310 0 914 6 315 5 11312 711 4 2 813 7 0 9 3 4 610 2 8 514121115 113 6 4 9 815 3 011 1 212 51014 7 11013 0 6 9 8 7 41514 311 5 212S4 71314 3 0 6 910 1 2 8 51112 41513 811 5 615 0 3 4 7 212 11014 910 6 9 01211 71315 1 314 5 2 8 4 315 0 610 113 8 9 4 51112 7 214S5 212 4 1 71011 6 8 5 31513 014 91411 212 4 713 1 5 01510 3 9 8 6 4 5 1111013 7 815 912 5 6 3 01411 812 7 114 213 615 0 910 4 5 3S612 11015 9 2 6 8 013 3 414 7 5111015 4 2 712 9 5 6 11314 011 3 8 91415 5 2 812 3 7 0 410 11311 6 4 3 212 9 515101114 1 7 6 0 813S7 411 21415 0 813 312 9 7 510 6 113 011 7 4 9 11014 3 512 215 8 6 1 4111312 3 7141015 6 8 0 5 9 2 61113 8 1 410 7 9 5 01514 2 312S813 2 8 4 61511 110 9 314 5 012 7 11513 810 3 7 412 5 611 014 9 2 711 4 1 91214 2 0 6101315 3 5 8 2 114 7 410 8131512 9 0 3 5 611 S-盒的置换规则为:取0,1,15上的4个置换,即它的4个排列排成4行,得一4*16矩阵。若给定该S盒的6个输入为b0 b1 b2 b3 b4 b5,在Si表中找出b0 b5行,b1b2 b3b4列的元素,以4位二进制表示该元素,此为S-盒Si的输出。例2.1   S2的输入为101011,                                      b1 =1,b6=1,b1 b6=(11)2=3                                      (b2 b3 b4 b5)2=(0101)2=5查S2表可知第3行第5列的输出是15,15的二进制表示为1111。则S2的输出为1111。8个S-盒的代换方式都是一样的。S盒输出的32比特经P置换,P置换的功能是将32位的输入,按以下顺序置换,然后输入仍为32比特。P置换的顺序如表2.5:表2.5 置换P16 7202129122817 1152326 5183110 2 824143227 3 9191330 62211 4252.2.4 子密钥的生成初始密钥K(64bit)PC-1D0(28bit)C0(28bit)LS1LS1K1PC-2D1C1LS2LS2LS16LS16K16PC-2D16C16图2.4 DES子密钥生成流程图图2.4给出了子密钥产生的流程图。首先对初始密钥经过置换PC-1(表2.67),将初始密钥的8个奇偶校验位剔除掉,而留下真正的56比特初始密钥。表2.6 密钥置换PC-1574941332517 9 158504234261810 259514335271911 36052443663554739312315 762544638302214 661534537292113 5282012 4然后将此56位分为C0,D0两部分,各28比特,C0,D0如下:C0=k57k49k44k36D0=k63k55k12k4然后分别进行一个循环左移函数LS1,得到C1,D1,将C1(28位),D1(28位)连成56比特数据,再经过密钥置换PC-2(表2.7)做重排动作,从而便得到了密钥K1(48位)。依次类推,便可得到K2,K3K16。表2.7 密钥置换PC-214171124 1 5 32815 62110231912 426 816 7272013 2415231374755304051453348444939563453464250362932其中LS1(1i16)表示一个或两个位置的循环左移,当i=1,2,9,16时,移一个位置,当i=3,4,5,6,7,8,10,11,12,13,14,15时,移两个位置。2.3 DES算法的解密过程DES算法的解密过程跟加密过程是一样的,区别仅仅在于第一次迭代时用密钥k16,第二次k15、,最后一次用k1,算法本身没有任何变化。第3章 DES算法用C+语言实现3.1设置密钥函数des_setkey()此函数的功能是由64比特的密钥产生16个子密钥ki。首先将密钥字节组key8转换为64比特的位组,然后进行密钥变换PC-1(祥见PC-1置换表),置换后得到56比特的密钥,把变换后的密钥等分成两部分,前28位记为C0, 后28位记为D0。将C0,D0进行LS1运算,LS1是循环左移运算。得到C1 ,D1,最后将其进行PC-2置换(见PC-2置换表),得到子密钥k1.然后依次按循环左移LSi(I=216,循环次数见循环左移规则), PC-2置换得到k2 k16。void des_setkey(const char key8);static void f_func(bool in32,const bool ki48);/f函数static void s_func(bool out32,const bool in48);/s盒代替/变换static void transform(bool *out, bool *in, const char *table, int len);static void xor(bool *ina, const bool *inb, int len);/异或static void rotatel(bool *in, int len, int loop);/循环左移3.2 f函数和S函数f_func()和s_func()此函数的功能是DES算法的关键,f是将32比特的输入转化为32比特的输出。这个两个函数中主要用到以下函数:(1) transform()此函数是通用置换函数,根据具体情况确定要执行哪种置换。在f函数中,先用于E置换,然后进行P置换。void transform(bool *out,bool *in,const char *table,int len)    static bool tmp256;    for(int i=0;i<len;i+)           tmpi=intablei-1;    memcpy(out,tmp,len);(2)e_table()E置换表,作用是将32比特的输入扩展为48比特。E输出的48比特的数据跟生成的子密钥进行异或运算,然后把得到的48比特的数据按顺序分成8组,每组6比特,分别通过S1, S2 ,,S8盒后又缩为32比特,即每盒输入为6比特,输出为4比特。将输出的32比特的数据经P置换,最后得到32比特的数据。static const char e_table48= 32, 1, 2, 3, 4, 5,4, 5, 6, 7, 8, 9,8, 9,10,11,12,11,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32, 1。(3)s_box    S盒。void s_func(bool out32,const bool in48)   for(char i=0,j,k;i<8;i+,in+=6,out+=4)              j=(in0<<1)+in5;           k=(in1<<3)+(in2<<2)+(in3<<1)+in4;           bytetobit(out,&s_boxijk,4);    (4)p_table()P置换表。const static char p_table32=16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25。(5)xor()此函数的功能是进行异或运算,异或运算是按位作不进位加法运算。void xor(bool *ina,const bool *inb,int len)       for(int i=0;i<len;i+)              inai=inbi;(6) bytetobit()此函数的功能是将输入的字节组转换为位组。void bytetobit(bool *out,const char *in,int bits)       for(int i=0;i<bits;i+)              outi=(ini/8>>(i%8) &1;与此相关的还有函数ttobyte()此函数的功能是将位组转换字节组。void bittobyte(char *out,const bool *in,int bits)       memset(out,0,(bits+7)/8);       for(int i=0;i<bits;i+)              outi/8|=ini<<(i%8);3.3 DES算法的运行函数des_run( )这个函数整个算法运行程序的最主要部分。这个函数用于加密还是解密取决于type的类型,如果type为encrypt,则进行加密;如果type的类型为decrypt,则进行解密。void des_run(char out8,char in8, bool type)    static bool m64,tmp32,*li=&m0, *ri=&m32;    bytetobit(m,in,64);    transform(m,m,ip_table,64);    if(type=encrypt)           for(int i=0;i<16;i+)                  memcpy(tmp,ri,32);                  f_func(ri,subkeyi);                  xor(ri,li,32);                  memcpy(li,tmp,32);              else           for(int i=15;i>=0;i-)                  memcpy(tmp,li,32);                  f_func(li,subkeyi);                  xor(li,ri,32);                  memcpy(ri,tmp,32);                  transform(m,m,ipr_table,64);    bittobyte(out,m,64);这个函数用到以下函数:(1) bytetobit()此函数的功能是将输入的字节组转换为位组。(2) transform()此函数是通用置换函数,根据具体情况确定要执行哪种置换。(3) memcpy()此函数是库函数,主要作用是进行内存单元的复制。(4) f_func()     此函数是des_run()函数运行的关键,是将32比特的输入转化为32比特的输出(5)xor()此函数的功能是进行异或运算,异或运算是按位作不进位加法运算。(6)bittobyte()此函数的功能是将位组转换字节组。3.4 DES算法的主函数void main()主函数的流程:void main()       char key8='p','r','o','g','r','a','m',str8;        puts("*DES*");        printf("n");        printf("n");        puts("please input your words");        gets(str);        printf("n");        puts("*

    注意事项

    本文(毕业设计(论文)分组密码算法DES的加密和解密的实现.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开