




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、昆明理工大學(xué)信息工程與自動化學(xué)院學(xué)生實驗報告( 2011 2012 學(xué)年 第 2 學(xué)期 )課程名稱:網(wǎng)絡(luò)安全 開課實驗室:應(yīng)用、網(wǎng)絡(luò)機房442 2012 年12 月21日年級、專業(yè)、班計科093學(xué)號200910405310姓名孫浩川成績實驗項目名稱AES加解密算法的實現(xiàn)指導(dǎo)教師繆祥華教師評語該同學(xué)是否了解實驗原理:A.了解B.基本了解C.不了解該同學(xué)的實驗?zāi)芰Γ篈.強 B.中等 C.差 該同學(xué)的實驗是否達(dá)到要求:A.達(dá)到B.基本達(dá)到C.未達(dá)到實驗報告是否規(guī)范:A.規(guī)范B.基本規(guī)范C.不規(guī)范實驗過程是否詳細(xì)記錄:A.詳細(xì)B.一般 C.沒有 教師簽名: 年 月 日1、 實驗?zāi)康?、對算法描述可進行
2、充分理解,精確理解算法的各個步驟。2、完成AES軟件算法的詳細(xì)設(shè)計。3、用C+完成算法的設(shè)計模塊。4、編制測試代碼。2、 實驗原理及基本技術(shù)路線圖(方框原理圖)AES 是一種可用來保護電子數(shù)據(jù)的新型加密算法。特別是,AES 是可以使用 128、192 和 256 位密鑰的迭代式對稱密鑰塊密碼,并且可以對 128 位(16 個字節(jié))的數(shù)據(jù)塊進行加密和解密。與使用密鑰對的公鑰密碼不同的是,對稱密鑰密碼使用同一個密鑰來對數(shù)據(jù)進行加密和解密。由塊密碼返回的加密數(shù)據(jù)與輸入數(shù)據(jù)具有相同的位數(shù)。迭代式密碼使用循環(huán)結(jié)構(gòu)來針對輸入數(shù)據(jù)反復(fù)執(zhí)行排列和置換運算。2.2算法實現(xiàn)以加密函數(shù)為例,如下所示,首先對密鑰進行
3、預(yù)處理密鑰擴展,然后明文進行Nr(Nr與密鑰長度有關(guān))次迭代運算,包括字節(jié)代換ShiftRows行移位、MixColumns、列混合以及AddRoundKey密鑰加。void Cipher() int i,j,round=0; / 把明文賦值到狀態(tài)數(shù)組中 for(i=0;i<4;i+)for(j=0;j<4;j+) stateji = ini*4 + j; / 先與初始輪密鑰相加 AddRoundKey(0); / 第一輪至(Nr-1)輪的迭代運算,第Nr輪不用進行列混合運算 for(round=1;round<Nr;round+) SubBytes();/字節(jié)代換 Shif
4、tRows();/行移位 MixColumns();/列混合 AddRoundKey(round);/密鑰加 SubBytes(); ShiftRows(); AddRoundKey(Nr); / 加密結(jié)束,將機密結(jié)果填入數(shù)組out中以便輸出 for(i=0;i<4;i+)for(j=0;j<4;j+) outi*4+j=stateji;解密函數(shù)的流程和加密函數(shù)是一致的,只是對于行變換、列變換、以及相關(guān)s盒子為加密的逆過程。字節(jié)代換(SubBytes)字節(jié)代換是非線形變換,獨立地對狀態(tài)的每個字節(jié)進行。行移位(ShiftRows)是將狀態(tài)陣列的各行進行循環(huán)移位,不同狀態(tài)行的位移量不同
5、。第0行不移動,第1行循環(huán)左移C1個字節(jié),第2行循環(huán)左移C2個字節(jié),第3行循環(huán)左移C3個字節(jié)。位移量C1、C2、C3的取值與Nb有關(guān)。列混合(MixColumns)是將狀態(tài)陣列的每個列視為多項式,再與一個固定的多項式c(x)進行模x4+1乘法。Rijndael的設(shè)計者給出的c(x)為(系數(shù)用十六進制數(shù)表示):c(x)=03x3+01x2+01x+02。密鑰加(AddRoundKey)是將輪密鑰簡單地與狀態(tài)進行逐比特異或。輪密鑰由種子密鑰通過密鑰編排算法得到,輪密鑰長度等于分組長度Nb。程序流程圖AES流程圖3、 所用儀器、材料(設(shè)備名稱、型號、規(guī)格等)計算機一臺、vc6.0四、實驗方法、步驟#
6、include<string.h>#include<stdio.h>#include<math.h>#include<conio.h>/ 中間結(jié)果state的分組的矩陣有4行,列數(shù)記為Nb#define Nb 4/ 機密輪數(shù),初始化為0int Nr=0;/ 種子密鑰以字節(jié)為元素的矩陣陣列表示,列數(shù)記為Nk,初始化為0int Nk=0;/ Nc: 密鑰長度,取(128, 192 , 256)中的一個值int Nc = 128;/ in為密文,out為密文,state運算的為中間結(jié)果unsigned char in16, out32, state44
7、;/ 輪密鑰unsigned char RoundKey240;/ 輸入的密鑰unsigned char Key32;/ 定義多項式的相關(guān)運算#define xtime(x) (x<<1) (x>>7) & 1) * 0x1b)#define Multiply(x,y) (y & 1) * x) (y>>1 & 1) * xtime(x) (y>>2 & 1) * xtime(xtime(x) (y>>3 & 1) * xtime(xtime(xtime(x) (y>>4 &
8、 1) * xtime(xtime(xtime(xtime(x)/ S-boxint getSBoxValue(int num) int sbox256 = 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36,
9、 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1,
10、 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4,
11、 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4,
12、 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce,
13、 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 ; return sboxnum;/ S-box的逆盒子,用于解密int getSBoxInvert(int num)int rsbox256 = 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39
14、, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86
15、, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f
16、, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f
17、, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a
18、, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d ;return rsboxnum;/ 異或輪常數(shù)Rconint Rcon255 = 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10,
19、 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08,
20、 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04,
21、 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02,
22、 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01,
23、 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb ;/ 產(chǎn)生各
24、個輪密鑰void KeyExpansion() int i,j; unsigned char temp4,k; / 首輪為密鑰自身 for(i=0;i<Nk;i+) RoundKeyi*4=Keyi*4; RoundKeyi*4+1=Keyi*4+1; RoundKeyi*4+2=Keyi*4+2; RoundKeyi*4+3=Keyi*4+3; / 其它輪密鑰產(chǎn)生 while (i < (Nb * (Nr+1) for(j=0;j<4;j+) tempj=RoundKey(i-1) * 4 + j; if (i % Nk = 0) k = temp0;temp0 = tem
25、p1;temp1 = temp2;temp2 = temp3;temp3 = k;temp0=getSBoxValue(temp0);temp1=getSBoxValue(temp1);temp2=getSBoxValue(temp2);temp3=getSBoxValue(temp3); temp0 = temp0 Rconi/Nk; else if (Nk > 6 && i % Nk = 4) temp0=getSBoxValue(temp0);temp1=getSBoxValue(temp1);temp2=getSBoxValue(temp2);temp3=getS
26、BoxValue(temp3); RoundKeyi*4+0 = RoundKey(i-Nk)*4+0 temp0; RoundKeyi*4+1 = RoundKey(i-Nk)*4+1 temp1; RoundKeyi*4+2 = RoundKey(i-Nk)*4+2 temp2; RoundKeyi*4+3 = RoundKey(i-Nk)*4+3 temp3; i+; / 將輪密鑰與狀態(tài)進行抑或void AddRoundKey(int round) int i,j; for(i=0;i<4;i+) for(j=0;j<4;j+) stateji = RoundKeyround
27、 * Nb * 4 + i * Nb + j;/ 從S-box中為state狀態(tài)進行字節(jié)替換void InvSubBytes() int i,j; for(i=0;i<4;i+) for(j=0;j<4;j+) stateij = getSBoxInvert(stateij);/ 行移位void InvShiftRows() unsigned char temp; / 第一行右移動三列 temp=state13; state13=state12; state12=state11; state11=state10; state10=temp; / 第二行右移動二列 temp=stat
28、e20; state20=state22; state22=temp; temp=state21; state21=state23; state23=temp; / 第一行右移動一列 temp=state30; state30=state31; state31=state32; state32=state33; state33=temp;/ 列混合void InvMixColumns() int i; unsigned char a,b,c,d; for(i=0;i<4;i+) a = state0i; b = state1i; c = state2i; d = state3i;/ Mu
29、ltiply為一種運算,每個列視為GF(28)上的多項式,再與一個固定的多項式c(x)進行模x4+1乘法 state0i = Multiply(a, 0x0e) Multiply(b, 0x0b) Multiply(c, 0x0d) Multiply(d, 0x09); state1i = Multiply(a, 0x09) Multiply(b, 0x0e) Multiply(c, 0x0b) Multiply(d, 0x0d); state2i = Multiply(a, 0x0d) Multiply(b, 0x09) Multiply(c, 0x0e) Multiply(d, 0x0b)
30、; state3i = Multiply(a, 0x0b) Multiply(b, 0x0d) Multiply(c, 0x09) Multiply(d, 0x0e); / 解密函數(shù)void InvCipher() int i,j,round=0; for(i=0;i<4;i+) for(j=0;j<4;j+) stateji = ini*4 + j; AddRoundKey(Nr); for(round=Nr-1;round>0;round-) InvShiftRows(); InvSubBytes(); AddRoundKey(round); InvMixColumns(
31、); InvShiftRows(); InvSubBytes(); AddRoundKey(0); for(i=0;i<4;i+) for(j=0;j<4;j+) outi*4+j=stateji;/ 以下三個函數(shù)為前面相對應(yīng)函數(shù)的逆過程,用于加密void SubBytes() int i,j; for(i=0;i<4;i+) for(j=0;j<4;j+) stateij = getSBoxValue(stateij);void ShiftRows() unsigned char temp; temp=state10; state10=state11; state11
32、=state12; state12=state13; state13=temp; temp=state20; state20=state22; state22=temp; temp=state21; state21=state23; state23=temp; temp=state30; state30=state33; state33=state32; state32=state31; state31=temp;#define xtime(x) (x<<1) (x>>7) & 1) * 0x1b)void MixColumns() int i; unsigne
33、d char Tmp,Tm,t; for(i=0;i<4;i+) t=state0i; Tmp = state0i state1i state2i state3i ; Tm = state0i state1i ; Tm = xtime(Tm); state0i = Tm Tmp ; Tm = state1i state2i ; Tm = xtime(Tm); state1i = Tm Tmp ; Tm = state2i state3i ; Tm = xtime(Tm); state2i = Tm Tmp ; Tm = state3i t ; Tm = xtime(Tm); state3
34、i = Tm Tmp ; / 加密函數(shù)void Cipher() int i,j,round=0; / 把明文賦值到狀態(tài)數(shù)組中 for(i=0;i<4;i+)for(j=0;j<4;j+) stateji = ini*4 + j; / 先與初始輪密鑰相加 AddRoundKey(0); / 第一輪至(Nr-1)輪的迭代運算,第Nr輪不用進行列混合運算 for(round=1;round<Nr;round+) SubBytes(); ShiftRows(); MixColumns(); AddRoundKey(round); SubBytes(); ShiftRows(); A
35、ddRoundKey(Nr); / 加密結(jié)束,將機密結(jié)果填入數(shù)組out中以便輸出 for(i=0;i<4;i+)for(j=0;j<4;j+) outi*4+j=stateji;/ 對明文進行預(yù)處理,包括計算其空間char *encrypt(char *str, char *key) int i,j,Nl;double len;char *newstr;char *str2; Nk = Nc / 32; Nr = Nk + 6; len= strlen(str); Nl = (int)ceil(len / 16); newstr = (char *)malloc(Nl*32); memset(newstr,0,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度投資理財代理服務(wù)合同
- 二零二五年度吊車安全操作規(guī)程制定及執(zhí)行合同
- 二零二五年度冬季勞務(wù)掃雪環(huán)境保護協(xié)議
- 2025年度正規(guī)貨車駕駛員勞動合同及貨運業(yè)務(wù)操作規(guī)范合同
- 二零二五年度扶貧項目風(fēng)險防范與應(yīng)急處理合作協(xié)議
- 二零二五年度合同糾紛賠償調(diào)解服務(wù)協(xié)議
- 二零二五年度名人房產(chǎn)銷售代理合同范本
- 2025年度智能制造股權(quán)抵押貸款合同
- 2025年度電子商務(wù)平臺合作解除終止范本
- 二零二五年度企業(yè)勞動合同解除與離職員工就業(yè)援助服務(wù)協(xié)議
- 2024綠化養(yǎng)護作業(yè)指導(dǎo)書
- 2023年12月大學(xué)英語4級真題(第三套)
- 創(chuàng)傷失血性休克中國急診專家共識(2023)解讀課件
- (完整版)幕墻施工方案
- 鋼結(jié)構(gòu)工程廠房、辦公樓施工組織設(shè)計方案
- 24年追覓在線測評28題及答案
- 醫(yī)學(xué)教材 超聲引導(dǎo)下乳腺真空微創(chuàng)旋切(VABB)
- 2024年鐵路線路工(高級技師)技能鑒定理論考試題庫(含答案)
- 工程造價預(yù)算書
- 終止授權(quán)代理協(xié)議書模板
- 修建水壩施工合同模板
評論
0/150
提交評論