摘 ?要:現(xiàn)代社會(huì)正處于計(jì)算機(jī)信息時(shí)代,瀏覽器可對(duì)網(wǎng)頁的源代碼文件進(jìn)行規(guī)范化的解析,使其Web內(nèi)容能正常顯示,但是Web服務(wù)存在多種數(shù)據(jù)傳輸格式,不同的數(shù)據(jù)格式所需存儲(chǔ)方法的實(shí)現(xiàn)代碼存在差異,因此需要提高代碼的彈性,以適應(yīng)未來的各種數(shù)據(jù)格式。通過介紹Web服務(wù)與RESTful技術(shù)進(jìn)行Provider消息處理,利用BufferImage方法針對(duì)《蒙娜麗莎》的24位位圖進(jìn)行解密算法得出新的內(nèi)容,而利用新的內(nèi)容反向加密算法即可得到《蒙娜麗莎》的畫像。
關(guān)鍵詞:Web服務(wù);RESTful技術(shù);24位位圖;BufferedImage;圖像加密解密
中圖分類號(hào):TP311.1 ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2020)04-0116-03
Abstract:Modern society is in the computer information age,the browser can be standardized parsing for Web source code files,make its Web content display properly,but there are many data transmission format for Web services,the storage method of the different data format required for the implementation of the code is different,so you need to improve the flexibility of the code,so as to adapt to a variety of data format in the future. By introducing Web services and RESTful technologies for Provider message processing,BufferImage method is used to decrypt the 24-bit bitmap of Mona Lisa to obtain new contents,while the new content reverse encryption algorithm is used to obtain the portrait of Mona Lisa.
Keywords:Web services;RESTful technology;24-bit bitmap;BufferedImage;image encryption and decryption
0 ?引 ?言
隨著萬維網(wǎng)時(shí)代的發(fā)展,不同信息在進(jìn)行交互時(shí),數(shù)據(jù)格式可能存在一定的差異性。如果每次更改存儲(chǔ)信息數(shù)據(jù)方法的代碼,會(huì)使得代碼的彈性不夠,也很難進(jìn)行拓展,無法適應(yīng)Media-Type、Mine-Type和Content-Type等各種類型格式,因此本文提出一種更有彈性的編碼方式,同樣可以實(shí)現(xiàn)該需求,即使用Web服務(wù)實(shí)現(xiàn)編碼。圖像這種文件,已經(jīng)滲透到我們的生活中,人的眼睛就是最明顯的成像工具,大到一片天空,小到一粒塵埃,它們之間是否會(huì)存在聯(lián)系;圖像和非圖像文件之間又是否可能存在聯(lián)系,這些問題的答案都存在于信息世界中。
1 ?Web服務(wù)的概念
在談到Web服務(wù)前,可以先聯(lián)想生活中形形色色的服務(wù),其相同的特點(diǎn)就是為了實(shí)現(xiàn)某項(xiàng)功能而產(chǎn)生的應(yīng)用。以此引申,計(jì)算機(jī)中的服務(wù)是指通過計(jì)算機(jī)來實(shí)現(xiàn)某個(gè)具體功能,比如提供計(jì)算器上的加減乘除算法是一種服務(wù);提供各國語言翻譯的功能是一種服務(wù);根據(jù)用戶輸入的矩形中心點(diǎn)和長度寬度為用戶畫一個(gè)矩形也是一種服務(wù)等。再對(duì)計(jì)算機(jī)服務(wù)進(jìn)行劃分,就可以理解到Web服務(wù)了,Web可以直譯為網(wǎng)絡(luò),Web服務(wù)就是指使用HTTP或HTTPs協(xié)議接受用戶的請(qǐng)求并以網(wǎng)絡(luò)為媒介提供功能服務(wù)的方式。
比如一種常見的Web服務(wù),用戶在瀏覽器的地址欄中輸入https://www.taobao.com之后點(diǎn)擊跳轉(zhuǎn),瀏覽器為用戶解析地址過后,將要訪問的淘寶頁面反饋給用戶。那么,這一簡單的過程就可以理解其為Web服務(wù)。首先這個(gè)服務(wù)是基于HTTPS協(xié)議的,包括輸入地址時(shí)最前方也加上了協(xié)議,方便Web服務(wù)器解析,然后,在從地址欄輸入U(xiǎn)RL到顯示淘寶頁面的整個(gè)過程是輸入U(xiǎn)RI之后點(diǎn)擊跳轉(zhuǎn),瀏覽器客戶端將https://www.taobao.com請(qǐng)求發(fā)送到服務(wù)器,并且確認(rèn)發(fā)送成功后(即該URL存在于服務(wù)器中),請(qǐng)求服務(wù)器響應(yīng),隨后請(qǐng)求將被服務(wù)器解析,最后便將其對(duì)應(yīng)的超文本標(biāo)記語言內(nèi)容封裝,以網(wǎng)頁形式發(fā)送到客戶端顯示出來,一次請(qǐng)求服務(wù)也就結(jié)束了。
2 ?RESTful的概念
REST是一種利用萬維網(wǎng)技術(shù)來構(gòu)建網(wǎng)絡(luò)軟件的構(gòu)架,也可以理解為是對(duì)MVC架構(gòu)改進(jìn)后所形成的一種架構(gòu),通過定義好的接口與不同的服務(wù)連接起來。其基于HTTP,可以使用XML格式定義或JSON格式定義。在目前主流的三種Web服務(wù)交互方案中,REST相比于SOAP以及XML-RPC更加簡單并具有可拓展性,也表示數(shù)據(jù)可以被定義、被發(fā)布。
ful本意上并沒有含義,其存在的意義是將名詞構(gòu)造為形容詞。由此形成的RESTful,無論是對(duì)編碼設(shè)計(jì)還是對(duì)URL的處理,都傾向于用更為簡單級(jí)、輕量級(jí)的方法設(shè)計(jì)與實(shí)現(xiàn)??傊?,RESTful并沒有一個(gè)明確的Web服務(wù)標(biāo)準(zhǔn),而更像是一種設(shè)計(jì)的風(fēng)格。
3 ?24位位圖
位圖(bitmap),亦稱為點(diǎn)陣圖像,是由稱作像素的單個(gè)點(diǎn)組成的。使用掃描儀掃描、計(jì)算機(jī)截屏以及相機(jī)拍攝等產(chǎn)生的圖片都屬于位圖,而文件顯示的格式以bmp作為文件后綴名,即標(biāo)識(shí)為位圖文件。位圖的優(yōu)點(diǎn)是可以體現(xiàn)顏色的細(xì)微過渡和變化,以此產(chǎn)生更加真實(shí)的效果,缺點(diǎn)是在保存時(shí)必須記錄圖中每一個(gè)像素的所處的位置和其顏色對(duì)應(yīng)的值,需要較大的存儲(chǔ)空間。
位圖中的一個(gè)關(guān)鍵因素為色彩深度,或稱色彩位數(shù),即位圖中對(duì)于每一個(gè)像素,需要使用多少個(gè)二進(jìn)制位的數(shù)值來表示對(duì)應(yīng)顏色,這一要素也是圖片分辨率的一個(gè)重要指標(biāo)。根據(jù)這一元素可以類推:2位位圖就是黑白圖,8位位圖是指2的8次方,就是256色圖,而24位位圖一般泛指的是RGB三色圖,32位位圖泛指CMYK四色圖。本文使用的圖像即為24位位圖,指圖片每一像素包含2的24次方的信息量,其中R對(duì)應(yīng)紅色基色red,包含2的8次方信息量,G對(duì)應(yīng)綠色基色green,包含2的8次方信息量,B對(duì)應(yīng)藍(lán)色基色blue,包含2的8次方信息量。
4 ?BufferedImage
在計(jì)算機(jī)語言中,Image和BufferedImage都?xì)w于類,區(qū)別就是在于,Image是一個(gè)抽象類,BufferedImage是Image的實(shí)現(xiàn),其中Buffered本意就是代表數(shù)據(jù)緩沖區(qū)域,所以BufferedImage是帶數(shù)據(jù)緩沖區(qū)的圖像類,使用該類才可以對(duì)于圖像進(jìn)行操作,包括圖片的大小變換、圖片的灰度級(jí)變換、圖片的透明度變換等。
通過一個(gè)簡單的例子就能明顯區(qū)分出BufferedImage與Image的差別,以及在實(shí)際操作過程中選用BufferedImage的原因。對(duì)于一張圖像而言,首先引入眼球的是它的高度和寬度,如果以二維視角角度出發(fā),也可以將其理解為長度和寬度,那么在計(jì)算機(jī)語言中,則要通過對(duì)應(yīng)方法顯示圖像的長度與寬度。
使用Image的情形如下:
public Image image;//定義一個(gè)Image類的對(duì)象image作為公有屬性
int width = image.getWidth();//此處報(bào)錯(cuò),提示該方法缺少參數(shù)
使用BufferedImage的情形如下:
public BufferedImage = image;//定義一個(gè)BudderedImage類的對(duì)象image作為公有屬性
int width = image.getWidth();//可正確執(zhí)行
通過了解java.awt中的相關(guān)信息可以了解,java.awt.Image圖像類是抽象類,僅提供獲得繪圖對(duì)象、圖像縮放、選擇圖像平滑度等功能,而且這些功能恰好都是抽象功能;而java.awt.image.BufferedImage是帶數(shù)據(jù)緩沖區(qū)的圖像類,與上述對(duì)于BufferedImage的解釋正好吻合,這些功能則是具體化的,都是人眼可見的。
5 ?《蒙娜麗莎》24位圖像的解密和《達(dá)芬奇》24位圖像的加密
先制作一張預(yù)處理的蒙娜麗莎24位圖像,如圖1所示,分辨率為1 000*1 531。隨后開始解密過程,按照位圖的理解,該圖像所包含的信息量為1 000像素*1 531像素*3比特的,其中1比特=8字節(jié)。解密的總體過程就是將一幅24位的圖像轉(zhuǎn)化為二進(jìn)制流。
對(duì)應(yīng)的加密過程以一個(gè)算法為中心,即選擇8個(gè)字節(jié)的最低位字節(jié),實(shí)際操作就是將每個(gè)像素的每個(gè)比特化為二進(jìn)制數(shù)據(jù),提取最后一位二進(jìn)制數(shù)據(jù),進(jìn)行重新組合,得到的新的字節(jié)總數(shù)為1 000*1 531*3/8,取得這些數(shù)據(jù)后,再將全部字節(jié)還原成一個(gè)新的二進(jìn)制數(shù)據(jù),選擇合適的方式打開,將得到《達(dá)芬奇》24位圖像,如圖2所示。值得注意的是,實(shí)際處理過程會(huì)發(fā)現(xiàn)不合理的地方,例如原圖像縱方向?yàn)? 531像素,需要提取1 531*3個(gè)字節(jié),再組合成8個(gè)字節(jié)的比特,顯然1 531*3/8并不是整數(shù),那么,對(duì)于需要補(bǔ)充的字節(jié),以0進(jìn)行填充,最后得到結(jié)果??傮w過程就是將二進(jìn)制流轉(zhuǎn)化為一副24位圖像。
使用Java程序設(shè)計(jì)的關(guān)鍵代碼如下:
//獲取bufferedImage的RGB值數(shù)組
publicstaticbyte[] arrayRGB(BufferedImagebufferedImage) {
return (byte[]) bufferedImage.getData().getDataElements (0,0,bufferedImage.getWidth(),
bufferedImage.getHeight(), null);
}
//獲取RGB值數(shù)組中的最低位
publicstaticbyte[] lastBitOfArrayRGB(byte[] ArrayRGB) {
byte[] lastBitOfArrayRGB = newbyte[ArrayRGB.length];
for (inti = 0; i lastBitOfArrayRGB[i] = (byte) (ArrayRGB[i] & 0x01); } returnlastBitOfArrayRGB; } //獲取解密信息的長度 publicstaticintlengthOfInformation(byte[] lastBitOfArray RGB) { String length = ""; byte[] temp = newbyte[32]; for (int x = 0; x temp[x] = lastBitOfArrayRGB[x]; } for (int y = temp.length - 1; y > 0; y -= 8) { String binary = ""; for (int z = y; z > y-8; z--) { binary += temp[z]; } length += binary; } returnInteger.valueOf(length,2) * 8; } //將解密信息進(jìn)行逆寫,注意BMP圖的像素表示順序?yàn)闉锽GR publicstaticbyte[] originByte(byte[] lastBitOfArrayRGB) { byte[] originByte = newbyte[lastBitOfArrayRGB.length]; for (int x = 0; x byte[] temp = newbyte[8]; int y, z; for (y = x, z = 7; y < x + 8 && y temp[z] = lastBitOfArrayRGB[y]; } int flag, flbg; for (flag = x, flbg = 0; flbg originByte[flag] = temp[flbg]; } } returnoriginByte; } //進(jìn)行base64加密,并寫入MessageBodyWriter Base64 base64 = new Base64(); entityStream.write(base64.encode(realInformation)); 6 ?結(jié) ?論 本文內(nèi)容主要取材于由江西財(cái)經(jīng)大學(xué)聶鵬老師團(tuán)隊(duì)制作并由中國大學(xué)慕課網(wǎng)推出的《Web服務(wù)與RESTful技術(shù)》慕課內(nèi)容中的消息處理知識(shí)點(diǎn)內(nèi)容。 計(jì)算機(jī)和萬維網(wǎng)技術(shù)的發(fā)展,為人們提供了便利,但隨之而來的是信息處理問題,可以選擇以圖像等為載體,通過對(duì)圖像的解密和加密,保證信息的完整性。本文以著名的《蒙娜麗莎》為例,經(jīng)過圖像的微處理,從信息中得到新的信息,即成為一幅新的圖像。 最后,如果使用程序設(shè)計(jì)繼續(xù)對(duì)《達(dá)芬奇》24位圖像進(jìn)行解密,又將得到新的內(nèi)容。選擇合適的方法,比如用記事本打開加密后的二進(jìn)制流文件,將顯示一句達(dá)芬奇對(duì)其愛人的告白語,翻譯成中文即為“麗莎·格拉迪尼,生活中‘最可悲的事比過去的痛苦記憶中的快樂還要多?!?/p> 參考文獻(xiàn): [1] 徐彤.基于Web Service的加密算法——以秘密情書為例 [J].現(xiàn)代信息科技,2019,3(2):100-101+105. [2] 張志,胡志勇.RESTful架構(gòu)在Web Service中的應(yīng)用 [J].自動(dòng)化技術(shù)與應(yīng)用,2018,37(10):33-37. 作者簡介:劉家銘(1999-),男,漢族,江西南昌人,本科在讀,研究方向:軟件工程。