信息隱藏LSB算法實(shí)驗(yàn)報(bào)告_第1頁(yè)
信息隱藏LSB算法實(shí)驗(yàn)報(bào)告_第2頁(yè)
信息隱藏LSB算法實(shí)驗(yàn)報(bào)告_第3頁(yè)
信息隱藏LSB算法實(shí)驗(yàn)報(bào)告_第4頁(yè)
信息隱藏LSB算法實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上本科生課程考試答題本 考生姓名考生學(xué)號(hào)專業(yè)班級(jí) 指導(dǎo)老師考試科目考試日期年月日 目錄一、 實(shí)驗(yàn)任務(wù)和要求1.1實(shí)驗(yàn)任務(wù) 信息載體:每個(gè)人自己的一張外景照片; 水印信息:每個(gè)人將學(xué)號(hào)、姓名按上下兩列寫在白紙上,然后手機(jī)拍攝,轉(zhuǎn)化為黑白圖片,作為水印信息; 信息隱藏方法:LSB算法(空域或頻域)。1.2實(shí)驗(yàn)要求 實(shí)驗(yàn)可采用matlab6.5以上版本(C+、Java等),程序分為嵌入與檢測(cè)兩部分,最好有友好的操作方式;程序代碼需要注釋,編碼簡(jiǎn)潔可靠明了,易檢查。 實(shí)驗(yàn)測(cè)試要求有: 需對(duì)信息處理進(jìn)行魯棒性測(cè)試; 對(duì)水印嵌入的有效性進(jìn)行測(cè)試; 計(jì)算嵌入前后的PSNR值; 對(duì)水印

2、容量進(jìn)行分析。二、實(shí)驗(yàn)算法LSB原理LSB是L.F.Turner和R.G.van Schyndel等人提出的一種典型的空間域信息隱藏算法。LSB 最低有效位法(Least Significant Bit;LSB)是運(yùn)用人類視覺(jué)系統(tǒng)無(wú)法覺(jué)察細(xì)微變化之掩蔽效果,將秘密信息隱藏在圖像像素的最低位,具有計(jì)算速度快且容易 秘密信息隱藏在圖像像素的最低位,具有計(jì)算速度快且容易實(shí)現(xiàn)有點(diǎn)。通常最低位是表示圖像細(xì)節(jié)信息,一般人眼不容易覺(jué)察,也因此容易成為一般信號(hào)處理和壓縮時(shí)被拋棄的部分。本次主要是針對(duì)24位的BMP圖片做處理,算法通過(guò)把信息嵌入到24位真彩色BMP圖象中,從而達(dá)到隱藏的效果。通常BMP圖像可以用

3、一個(gè)M*N的矩陣表示,矩陣的數(shù)值表示一個(gè)像素的色彩信息,一般用8位二進(jìn)制數(shù)表示。每個(gè)像素對(duì)應(yīng)的數(shù)值的每位bit其意義和作用不盡相同,我們可以把每個(gè)數(shù)據(jù)的每一位bit構(gòu)成一個(gè)平面數(shù)據(jù),稱為位平面,其中由每一個(gè)像素最低比特位組成的稱為第0個(gè)位平面,為最不重要為平面,相應(yīng)的比特位稱為最低有效位(LSB)。LSB算法原理就是通過(guò)修改最不重要的LSB后,圖像的改變根本無(wú)法用肉眼識(shí)別,以此來(lái)實(shí)現(xiàn)以圖像為載體的信息隱藏。三、實(shí)驗(yàn)環(huán)境和采用的工具 此次試驗(yàn)環(huán)境及工具見(jiàn)下表3.1所示。表3.1 實(shí)驗(yàn)環(huán)境及工具項(xiàng)目?jī)?nèi)容實(shí)驗(yàn)環(huán)境Windows 7(64位)開(kāi)發(fā)工具M(jìn)icrosoft Visual Studio 20

4、12(C#)圖像處理Matlab 2010 Ra輔助工具Photoshop/畫圖四、具體實(shí)現(xiàn)步驟實(shí)驗(yàn)主要包括三個(gè)方面,LSB算法水印嵌入、LSB算法水印提取以及針對(duì)LSB算法性能的測(cè)試。4.1 LSB算法水印嵌入LSB算法水印嵌入主要步驟是加載載體和水印圖片、將圖片文件流轉(zhuǎn)換成二進(jìn)制數(shù)組(設(shè)計(jì)兩個(gè)轉(zhuǎn)換函數(shù):長(zhǎng)整型轉(zhuǎn)換成24位和1字節(jié)轉(zhuǎn)換成8位,詳見(jiàn)后面源碼分析)、獲得水印長(zhǎng)度判定是否大于載體長(zhǎng)度大約1/8(程序中有詳細(xì)的圖4.1 LSB水印嵌入流程圖計(jì)算公式)、大于則重新選擇水??;符合則進(jìn)行水印長(zhǎng)度嵌入(設(shè)計(jì)長(zhǎng)度值嵌在載體BMP第55-77位字節(jié)(24位)的LSB處)、循環(huán)獲得水印內(nèi)容并嵌入(

5、內(nèi)容從載體BMP的78位字節(jié)處開(kāi)始,載體每8位嵌入1位字節(jié)水?。⒆詈蟊4骐[寫體、備份載體。該嵌入步驟說(shuō)明下:(1)長(zhǎng)度嵌入在載體第55-77字節(jié),這是因?yàn)?4位BMP圖前54位存儲(chǔ)的是圖片本身信息(如果嵌入可能會(huì)破壞載體圖片導(dǎo)致嵌入后的隱寫體無(wú)法正確讀?。?;選擇24位字節(jié)是因?yàn)榭梢郧度?4位的二進(jìn)制長(zhǎng)度,即能夠嵌入2的24方水印信息(此范圍合適,當(dāng)然最終能否嵌這么多還要看載體信息長(zhǎng)度)。(2)備份載體,這是為后面進(jìn)行嵌入效果的對(duì)比和PSNR值做準(zhǔn)備。4.2 LSB算法水印提取LSB算法水印提取與嵌入基本相同,主要步驟是加載隱寫體、選擇提取水印的保存名字及位置、將圖片文件流轉(zhuǎn)換成二進(jìn)制數(shù)組(同

6、嵌入)、提取隱寫體第55-77位的水印信息長(zhǎng)度、判定長(zhǎng)度是否大于隱寫體長(zhǎng)度的大約1/8(程序中有詳細(xì)的計(jì)算)、大于,則提示可能不包含水印(判定方式做的比較簡(jiǎn)單);小于,則開(kāi)始從隱寫體的78位逆置換提取水印、保存水印、選擇原始水印進(jìn)行比較。圖4.2 LSB水印提取流程圖說(shuō)明:1.因?yàn)殚L(zhǎng)度不滿足,系統(tǒng)就不做提取(設(shè)計(jì)比較簡(jiǎn)單); 2.水印對(duì)比中,如有嵌入過(guò)程,則不需選擇;直接提取需要選擇原始水印。4.3 LSB算法實(shí)驗(yàn)測(cè)試測(cè)試這一模塊主要有:魯棒性測(cè)試、可行性分析、計(jì)算PSNR值以及水印容量分析等內(nèi)容。這一部分的實(shí)驗(yàn)步驟主要按照它們的分析進(jìn)行,具體見(jiàn)下。1魯棒性檢測(cè)主要是對(duì)嵌入水印后的隱寫體進(jìn)行各

7、種變換(比如旋轉(zhuǎn)、裁剪、放大縮小等),轉(zhuǎn)換后再進(jìn)行隱寫體的水印提取。其中變換可以借用Photoshop或者畫圖來(lái)簡(jiǎn)單實(shí)現(xiàn)。2LSB水印嵌入的可行性分析主要是針對(duì)嵌入是否合理、提取是否成功等進(jìn)行分析。作為最簡(jiǎn)單常用的水印嵌入算法LSB,它的可行性分析具體見(jiàn)后面。3計(jì)算PSNR值,這個(gè)依據(jù)PSNR值計(jì)算公式,使用C#語(yǔ)言界面化實(shí)現(xiàn)。具體步驟就是加載隱寫體和原始載體,計(jì)算PSNR值并顯示。4水印容量分析,這個(gè)在設(shè)計(jì)實(shí)現(xiàn)LSB算法時(shí)已經(jīng)做了初步定論,分析的實(shí)現(xiàn)可以簡(jiǎn)單計(jì)算出來(lái)或者利用matlab實(shí)現(xiàn)。五、源碼分析5.1 LSB算法水印嵌入根據(jù)前面的原理和分析,我主要是利用visual studio 2

8、012結(jié)合C#語(yǔ)言進(jìn)行LSB算法的實(shí)現(xiàn)。LSB水印嵌入主要是建立LSBEncrypt類來(lái)實(shí)現(xiàn),其中有如下五個(gè)函數(shù),具體功能見(jiàn)下表5.1所示。表5.1 LSB水印嵌入所用函數(shù)及功能函數(shù)名功能byte ConvertToBinaryArray(long x)將長(zhǎng)整型數(shù)轉(zhuǎn)換為24位二進(jìn)制字節(jié)數(shù)組ConvertToBinaryArray(bytearray)將1個(gè)字節(jié)轉(zhuǎn)換為8位二進(jìn)制字節(jié)數(shù)組void HideInfoLength()在載體55-77字節(jié)LSB替換為水印的長(zhǎng)度void HideInfoContent()將水印信息以每1個(gè)字節(jié)寫入載體圖像從第78字節(jié)開(kāi)始的每8字節(jié)塊的LSB中void Ex

9、ecuteEncrypt()執(zhí)行LSB水印信息嵌入操作 根據(jù)上表5.1中的函數(shù)及功能,主要的源碼分析見(jiàn)下面:namespace LSB_Algorithm class LSBEncrypt /原始載體圖片路徑 private string _originalPicPath = null; /水印信息路徑 private string _hidingInfoPath = null; /原始載體圖片的文件流 private FileStream _picStream = null; /水印信息的文件流 private FileStream _infoStream = null; / <sum

10、mary> / LSBEncrypt類的構(gòu)造函數(shù) / </summary> / <param name="path1">原始圖片路徑</param> / <param name="path2">隱藏信息的路徑</param> public LSBEncrypt(string path1, string path2) _originalPicPath = path1; _hidingInfoPath = path2; / <summary> / 將長(zhǎng)整型數(shù)轉(zhuǎn)換為24位二進(jìn)制表示的

11、字節(jié)數(shù)組 / </summary> / <param name="x">長(zhǎng)整型數(shù),數(shù)的不會(huì)超過(guò)2的24次方</param> / <returns>二進(jìn)制表示的字節(jié)數(shù)組</returns> private byte ConvertToBinaryArray(long x) byte binaryArray = new byte24; for (int i = 0; i != 24; i+) binaryArray23- i = (byte)(x & 1); x = x >> 1; return b

12、inaryArray; / <summary> / 將1個(gè)字節(jié)的數(shù)組轉(zhuǎn)換為8位二進(jìn)制表示的字節(jié)數(shù)組 / </summary> / <param name="array">長(zhǎng)度為1的字節(jié)數(shù)組</param> / <returns>二進(jìn)制表示的字節(jié)數(shù)組</returns> private byte ConvertToBinaryArray(byte array) byte binaryArray = new byte8; int a = array0; for (int i = 0; i != 8; i+)

13、 binaryArray7 - i = (byte)(a & 1); a = a >> 1; return binaryArray; / <summary> / 將圖像的第55至第77字節(jié)的LSB替換為水印信息文件的長(zhǎng)度 / </summary> private void HideInfoLength() byte picBlock = new byte24; /讀取原始載體圖像的第55至第77字節(jié)的內(nèi)容塊 _picStream.Position = 54; _picStream.Read(picBlock, 0, picBlock.Length);

14、 byte lenArray = ConvertToBinaryArray(_infoStream.Length); /置入水印文件的長(zhǎng)度信息 int index = 0; for (int i = 0; i < 24; i+) picBlocki = (byte)(lenArrayindex+ = 0) ? (picBlocki & 254) : (picBlocki | 1); /將原始載體文件流重定位到第55字節(jié)處/并將已嵌入長(zhǎng)度信息的24字節(jié)塊寫回 _picStream.Position = 54; _picStream.Write(picBlock, 0, picBlo

15、ck.Length); _picStream.Flush(); / <summary> / 將水印信息以每1字節(jié)寫入載體第78字節(jié)開(kāi)始每8字節(jié)塊LSB中 / </summary> private void HideInfoContent() int readCnt = 0; /計(jì)算循環(huán)處理的次數(shù) long infoLen = _infoStream.Length; _picStream.Position = 78; for (int i = 0; i < infoLen; i+) /每次循環(huán)讀取BMP圖像的下一個(gè)8字節(jié)的內(nèi)容 byte picBlock = new

16、 byte8; readCnt = _picStream.Read(picBlock, 0, picBlock.Length); /讀取水印信息的下一個(gè)1字節(jié)內(nèi)容 byte readBuffer = new byte1; _infoStream.Read(readBuffer, 0, readBuffer.Length); byte infoBlock = ConvertToBinaryArray(readBuffer); /置位操作 int index = 0; for (int ii = 0; ii < 8; ii+) picBlockii = (byte)(infoBlockind

17、ex+ = 0) ? (picBlockii & 254) : (picBlockii | 1); _picStream.Position -= readCnt; _picStream.Write(picBlock, 0, picBlock.Length); _picStream.Flush(); / <summary> / 執(zhí)行LSB水印嵌入操作 / </summary> public void ExecuteEncrypt() _picStream = new FileStream(_originalPicPath, FileMode.Open, FileA

18、ccess.ReadWrite);/讀取載體圖片信息流 _infoStream = new FileStream(_hidingInfoPath, FileMode.Open, FileAccess.Read); /讀取水印信息流 HideInfoLength(); /嵌入水印信息長(zhǎng)度 HideInfoContent(); /嵌入水印信息內(nèi)容 _picStream.Close(); _infoStream.Close(); LSB水印嵌入源碼說(shuō)明: 1。整體源碼執(zhí)行流程和前面的LSB嵌入流程圖一致,各功能有具體的函數(shù)實(shí)現(xiàn),算法思想簡(jiǎn)單傳統(tǒng),沒(méi)有做很大的改進(jìn),整體代碼設(shè)計(jì)簡(jiǎn)單易懂。5.2 LSB

19、算法水提取根據(jù)前面的原理和分析,我主要是利用visual studio 2012結(jié)合C#語(yǔ)言進(jìn)行LSB算法的實(shí)現(xiàn)。LSB水印嵌入主要是建立LSBDecrypt類來(lái)實(shí)現(xiàn),其中有如下4個(gè)函數(shù),具體功能見(jiàn)下表5.2所示。表5.2 LSB水印嵌入所用函數(shù)及功能函數(shù)名功能int GetInfoLength()調(diào)用長(zhǎng)度提取函數(shù)來(lái)獲取水印信息長(zhǎng)度ExtractHidingLengthBits(byte arr)從24字節(jié)中提取出3字節(jié)水印長(zhǎng)度信息ExtractHidingBits(byte arr)從8字節(jié)塊中提取出的1字節(jié)水印信息ExecuteDecrypt()執(zhí)行LSB水印提取功能 根據(jù)上表5.2中的函

20、數(shù)及功能,主要的源碼分析見(jiàn)下面:namespace LSB_Algorithm class LSBDecrypt /隱寫體圖片的路徑 private string _camouflagePicPath = null; /還原出的水印信息的保存路徑 private string _infoSavePath = null; /隱寫體圖片的文件流 private FileStream _camouflageStream = null; /還原出的水印信息的文件流 private FileStream _infoSaveStream = null; / <summary> / LSBDec

21、rypt的構(gòu)造函數(shù) / </summary> / <param name="path1">隱寫體圖片的路徑</param> / <param name="path2">還原出的水印信息的保存路徑</param> public LSBDecrypt(string path1, string path2) _camouflagePicPath = path1; _infoSavePath = path2; / <summary> / 從隱寫體的第55至第77字節(jié)中提取出水印信息的長(zhǎng)度 /

22、 </summary> / <returns>隱藏信息長(zhǎng)度</returns> private int GetInfoLength() _camouflageStream = new FileStream(_camouflagePicPath, FileMode.Open, FileAccess.Read); /將文件流定位到第55個(gè)字節(jié)處 _camouflageStream.Position = 54; /讀取包含水印信息長(zhǎng)度的24個(gè)字節(jié)塊 byte lengthBlock = new byte24; _camouflageStream.Read(leng

23、thBlock, 0, lengthBlock.Length); /提取LSB byte lengthBitArray = ExtractHidingLengthBits(lengthBlock); int len = lengthBitArray0* 65536 + lengthBitArray1 * 256 + lengthBitArray2; /如果長(zhǎng)度不正確表明該圖片可能不含有隱藏信息(檢測(cè)較簡(jiǎn)單) if (len <=0 | len > (_camouflageStream.Length - 54) / 8 - 3) _camouflageStream.Close();

24、return -1; return len; / <param name="arr">長(zhǎng)度為24的字節(jié)數(shù)組,含有隱藏信息</param> / <returns>從24字節(jié)塊中提取出的3字節(jié)隱藏信息</returns> private byte ExtractHidingLengthBits(byte arr) /用于存放從24個(gè)字節(jié)塊中提取出來(lái)的3個(gè)字節(jié)的隱藏信息 byte buf = new byte3; /24個(gè)bit位的處理 buf0 = (byte)(arr0 & 1) = 0 ? (buf0 & 12

25、7) : (buf0 | 128); /a7 buf0 = (byte)(arr1 & 1) = 0 ? (buf0 & 191) : (buf0 | 64); /a6 buf0 = (byte)(arr2 & 1) = 0 ? (buf0 & 223) : (buf0 | 32); /a5 buf0 = (byte)(arr3 & 1) = 0 ? (buf0 & 239) : (buf0 | 16); /a4 buf0 = (byte)(arr4 & 1) = 0 ? (buf0 & 247) : (buf0 | 8); /a

26、3 buf0 = (byte)(arr5 & 1) = 0 ? (buf0 & 251) : (buf0 | 4); /a2 buf0 = (byte)(arr6 & 1) = 0 ? (buf0 & 253) : (buf0 | 2); /a1 buf0 = (byte)(arr7 & 1) = 0 ? (buf0 & 254) : (buf0 | 1); /a0 buf1 = (byte)(arr8 & 1) = 0 ? (buf1 & 127) : (buf1 | 128); /b7 buf1 = (byte)(arr9 &

27、amp; 1) = 0 ? (buf1 & 191) : (buf1 | 64); /b6 buf1 = (byte)(arr10 & 1) = 0 ? (buf1 & 223) : (buf1 | 32); /b5 buf1 = (byte)(arr11 & 1) = 0 ? (buf1 & 239) : (buf1 | 16); /b4 buf1 = (byte)(arr12 & 1) = 0 ? (buf1 & 247) : (buf1 | 8); /b3 buf1 = (byte)(arr13 & 1) = 0 ? (bu

28、f1 & 251) : (buf1 | 4); /b2 buf1 = (byte)(arr14 & 1) = 0 ? (buf1 & 253) : (buf1 | 2); /b1 buf1 = (byte)(arr15 & 1) = 0 ? (buf1 & 254) : (buf1 | 1); /b0 buf2 = (byte)(arr16 & 1) = 0 ? (buf2 & 127) : (buf2 | 128); /c7 buf2 = (byte)(arr17 & 1) = 0 ? (buf2 & 191) : (b

29、uf2 | 64); /c6 buf2 = (byte)(arr18 & 1) = 0 ? (buf2 & 223) : (buf2 | 32); /c5 buf2 = (byte)(arr19 & 1) = 0 ? (buf2 & 239) : (buf2 | 16); /c4 buf2 = (byte)(arr20 & 1) = 0 ? (buf2 & 247) : (buf2 | 8); /c3 buf2 = (byte)(arr21 & 1) = 0 ? (buf2 & 251) : (buf2 | 4); /c2 buf

30、2 = (byte)(arr22 & 1) = 0 ? (buf2 & 253) : (buf2 | 2); /c1 buf2 = (byte)(arr23 & 1) = 0 ? (buf2 & 254) : (buf2 | 1); /c0 return buf; / <summary> / 利用位操作提取隱寫體文件流中每8字節(jié)的LSB位 / </summary> / <param name="arr">長(zhǎng)度為8的字節(jié)數(shù)組,含有隱藏信息</param> / <returns>從8字節(jié)

31、塊中提取出的1字節(jié)隱藏信息</returns> private byte ExtractHidingBits(byte arr) /用于存放從8個(gè)字節(jié)塊中提取出來(lái)的1個(gè)字節(jié)的隱藏信息 byte buf = new byte1; /8個(gè)bit位的處理 buf0 = (byte)(arr0 & 1) = 0 ? (buf0 & 127) : (buf0 | 128); /a7 buf0 = (byte)(arr1 & 1) = 0 ? (buf0 & 191) : (buf0 | 64); /a6 buf0 = (byte)(arr2 & 1)

32、= 0 ? (buf0 & 223) : (buf0 | 32); /a5 buf0 = (byte)(arr3 & 1) = 0 ? (buf0 & 239) : (buf0 | 16); /a4 buf0 = (byte)(arr4 & 1) = 0 ? (buf0 & 247) : (buf0 | 8); /a3 buf0 = (byte)(arr5 & 1) = 0 ? (buf0 & 251) : (buf0 | 4); /a2 buf0 = (byte)(arr6 & 1) = 0 ? (buf0 & 253)

33、 : (buf0 | 2); /a1 buf0 = (byte)(arr7 & 1) = 0 ? (buf0 & 254) : (buf0 | 1); /a0 return buf; / <summary> / 執(zhí)行信息提取操作 / </summary> / <returns>執(zhí)行成功返回true,失敗返回false</returns> public bool ExecuteDecrypt() int infoLen = GetInfoLength(); if (infoLen = -1) return false; /判定長(zhǎng)度是

34、否合格,不合格退出 _infoSaveStream = new FileStream(_infoSavePath, FileMode.Create, FileAccess.Write); /置文件流位置 _camouflageStream.Position = 78; _infoSaveStream.Position = 0; /按8字節(jié)一組每次提取1個(gè)字節(jié)的隱藏信息并寫入文件 for (int i = 0; i < infoLen; i+) byte contentBlock = new byte8; _camouflageStream.Read(contentBlock, 0, co

35、ntentBlock.Length); byte contentBitArray = ExtractHidingBits(contentBlock); _infoSaveStream.Write(contetBitArray, 0, contentBitArray.Leth); _infoSaveStream.Flush(); _camouflageStream.Close(); _infoSaveStream.Close(); return true; LSB水印提取源碼說(shuō)明: 1。整體源碼執(zhí)行流程和前面的LSB提取流程圖一致,主要是嵌入過(guò)程的逆操作。其中有兩個(gè)提取函數(shù):一個(gè)是從24位字節(jié)中

36、提取3字節(jié)的長(zhǎng)度信息;一個(gè)是從8字節(jié)中提取1字節(jié)的水印內(nèi)容,其實(shí)這兩個(gè)函數(shù)可以合在一起,但是為了更好地理解程序,故沒(méi)有整合在一起。5.3 計(jì)算PSNR值 計(jì)算PSNR值,主要是根據(jù)其原理和計(jì)算公式見(jiàn)下面,利用C#做出程序?qū)崿F(xiàn)。圖5.3 PSNR值計(jì)算公式具體的實(shí)驗(yàn)程序代碼分析見(jiàn)下面:public double countPSNR(string formerFpath, string laterFpath) Bitmap formerImage = new Bitmap(formerFpath); Bitmap laterImage = new Bitmap(laterFpath); double sumR = 0; double sumG = 0; double sumB = 0; for (int i = 0; i < formerImage.Width - 1; i+) for (int j = 0; j < formerImage.Height - 1; j+) Color color1 = formerImage.GetPixel(i, j); Color color2 = laterImage.GetPixel(i,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論