邵佳莉,張建科,吳遠(yuǎn)紅
(1.舟山市市場(chǎng)監(jiān)督管理局普陀分局,浙江 舟山 316100;2.浙江海洋大學(xué) 信息工程學(xué)院,浙江 舟山 316100)
隨著社會(huì)經(jīng)濟(jì)發(fā)展以及生活水平的提高,人們對(duì)食品質(zhì)量的重視程度也越來(lái)越高。海產(chǎn)品是重要的食品來(lái)源,我國(guó)是世界上海鮮消費(fèi)量最大的國(guó)家之一。海產(chǎn)品味道自然鮮美、無(wú)添加劑的特點(diǎn)使其深受人們歡迎。目前市面上的海產(chǎn)品來(lái)源主要分為近海捕撈、遠(yuǎn)洋作業(yè)和海水養(yǎng)殖3 種。受各種因素影響,海水養(yǎng)殖的產(chǎn)量占比越來(lái)越大。影響海產(chǎn)品質(zhì)量的因素有很多,包括產(chǎn)地、存儲(chǔ)方式、運(yùn)輸時(shí)長(zhǎng)等,養(yǎng)殖水產(chǎn)還需考慮用水、苗種質(zhì)量、飼料獸藥、藥物殘留量等因素。不同質(zhì)量的海產(chǎn)品鮮度、營(yíng)養(yǎng)成分和價(jià)格差異都很大。例如,野生大黃魚(yú)的價(jià)格是養(yǎng)殖大黃魚(yú)的一百多倍。近年來(lái),市場(chǎng)上部分商家為追求高額利潤(rùn),或把遠(yuǎn)洋水產(chǎn)品的產(chǎn)地標(biāo)注為近海,或把養(yǎng)殖水產(chǎn)標(biāo)注為野生水產(chǎn),還有些把冷凍水產(chǎn)解凍后充當(dāng)鮮活水產(chǎn)銷(xiāo)售,有些商家利用信息不對(duì)稱(chēng)性,把低檔魚(yú)類(lèi)充當(dāng)高檔魚(yú)類(lèi)出售。為維護(hù)消費(fèi)者利益,同時(shí)保護(hù)合法商家的聲譽(yù),海產(chǎn)品質(zhì)量溯源已經(jīng)成為大勢(shì)所趨的行業(yè)需求。
海產(chǎn)品質(zhì)量溯源的方法較多,菜市場(chǎng)的管理部門(mén)會(huì)通過(guò)化學(xué)分析、超微分析等手段實(shí)現(xiàn)質(zhì)量監(jiān)管。存儲(chǔ)運(yùn)輸環(huán)節(jié)商家會(huì)使用無(wú)線射頻技術(shù),在海產(chǎn)品包裝上加貼帶芯片的標(biāo)識(shí)[1],自動(dòng)采集和讀取相關(guān)信息,海產(chǎn)品流向也記錄存儲(chǔ)在芯片上,為海產(chǎn)品追溯提供防偽、防竄貨及信息追溯功能。海水養(yǎng)殖領(lǐng)域則較多應(yīng)用信息采集法,利用無(wú)線傳感網(wǎng)直接采集環(huán)境信息、智能化視頻監(jiān)控記錄狀況、電子門(mén)禁系統(tǒng)記錄養(yǎng)殖人員、產(chǎn)品檢測(cè)報(bào)告自動(dòng)數(shù)字化等手段,把海產(chǎn)品追溯的重要關(guān)聯(lián)信息上傳至質(zhì)量監(jiān)管部門(mén)[2]。消費(fèi)者一般使用網(wǎng)站查詢(xún)、電話(huà)問(wèn)詢(xún)、條形碼識(shí)別、微信公眾號(hào)查詢(xún)進(jìn)行信息溯源。隨著機(jī)器視覺(jué)技術(shù)的發(fā)展,二維碼技術(shù)的應(yīng)用在社會(huì)各個(gè)方面得到推廣。手機(jī)的普及使消費(fèi)者只需掃描二維碼即可得到商品的相關(guān)信息。當(dāng)前,利用二維碼技術(shù)結(jié)合數(shù)據(jù)庫(kù)技術(shù)、網(wǎng)絡(luò)或云服務(wù)技術(shù),實(shí)現(xiàn)商品在生產(chǎn)、存儲(chǔ)、銷(xiāo)售等全領(lǐng)域的數(shù)字化信息記載,不僅讓消費(fèi)者了解商品的質(zhì)量信息,還能讓監(jiān)管部門(mén)實(shí)時(shí)監(jiān)控商品的生產(chǎn)過(guò)程,提高消費(fèi)者的知情權(quán)和商家的公信力。
縱觀國(guó)內(nèi)外,二維碼技術(shù)已經(jīng)被廣泛應(yīng)用到各類(lèi)商品質(zhì)量溯源中,但是溯源對(duì)象大部分為非鮮活產(chǎn)品,魚(yú)、蝦蟹等海產(chǎn)品溯源系統(tǒng)的研究很少。本研究在充分了解海產(chǎn)品產(chǎn)業(yè)鏈中貨物標(biāo)識(shí)方式的情況下,結(jié)合企業(yè)與消費(fèi)者的需求,采用時(shí)間戳編碼技術(shù)唯一標(biāo)記海產(chǎn)品群體,使用RSA 加密二維碼技術(shù),構(gòu)建了一個(gè)面向漁業(yè)公司、養(yǎng)殖企業(yè)及公眾用戶(hù)的海產(chǎn)品質(zhì)量溯源平臺(tái),保障消費(fèi)者快捷精準(zhǔn)地查詢(xún)到海產(chǎn)品在生產(chǎn)各環(huán)節(jié)的質(zhì)量信息,確保海產(chǎn)品全過(guò)程安全控制,為消費(fèi)者提供新鮮、安全、優(yōu)質(zhì)的放心產(chǎn)品。
傳統(tǒng)的一維條形碼技術(shù)存在信息量少、無(wú)錯(cuò)誤糾正能力、保密防偽性能差、可靠性低、可述信息種類(lèi)少等缺點(diǎn)?;谝陨先秉c(diǎn),國(guó)際物品編碼組織在2020 年底提出了“全球二維碼遷移計(jì)劃”(Global Migration to 2D,GM2D)全球倡議,預(yù)計(jì)于2027 年實(shí)現(xiàn)所有商品從一維條形碼到二維碼的轉(zhuǎn)換。
二維碼是建立在計(jì)算機(jī)圖像處理技術(shù)、組合編碼原理等基礎(chǔ)上的一種新型圖形符號(hào)自動(dòng)識(shí)讀處理碼制。二維碼以特定的幾何圖形按一定規(guī)律在平面上分布黑白相間的圖形來(lái)記錄數(shù)據(jù)信息。在代碼編制上巧妙地利用計(jì)算機(jī)二進(jìn)制構(gòu)成比特流的概念,使用若干與二進(jìn)制相對(duì)應(yīng)的幾何形體來(lái)表示數(shù)值、文字信息,通過(guò)圖像掃描設(shè)備自動(dòng)識(shí)讀出并自動(dòng)處理。二維碼具有儲(chǔ)存信息量大、內(nèi)容豐富多樣、保密性強(qiáng)、追蹤性強(qiáng)、糾錯(cuò)能力強(qiáng)、識(shí)別率高和成本便宜等特性[3]。特別是即使有一部分圖形缺損或形態(tài)扭曲還是可供識(shí)別辨認(rèn)的特點(diǎn),使二維碼逐漸取代一維條形碼。二維碼溯源有兩種方案,第1 種方案是在二維碼的編碼中直接描述海產(chǎn)品的相關(guān)信息;第2 種方案是先對(duì)海產(chǎn)品進(jìn)行商品編碼,且具有唯一性,在二維碼中記錄此編碼,存儲(chǔ)于數(shù)據(jù)庫(kù)服務(wù)器上的相關(guān)信息與此編碼一一對(duì)應(yīng)。方案二相比方案一具有以下優(yōu)勢(shì)。①可追溯的信息量大。不僅包括數(shù)字、文字信息,還包括記錄生產(chǎn)過(guò)程的相關(guān)視頻信息。②追溯的信息動(dòng)態(tài)化。海產(chǎn)品存儲(chǔ)、運(yùn)輸?shù)姆绞胶蜁r(shí)長(zhǎng)是影響質(zhì)量的重要因素,服務(wù)器中的數(shù)據(jù)庫(kù)可實(shí)時(shí)更新海產(chǎn)品的此類(lèi)信息,使消費(fèi)者掌握最新的信息。本研究采用方案二,利用網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)服務(wù)器和Web 服務(wù)實(shí)現(xiàn)基于二維碼的海產(chǎn)品質(zhì)量溯源系統(tǒng)。
RSA 算法是被廣泛研究的公鑰算法,從出現(xiàn)至今,經(jīng)歷了各種攻擊的考驗(yàn),逐漸為人們所接受,被普遍認(rèn)為是目前最優(yōu)秀的加密方案之一。RSA 算法屬于非對(duì)稱(chēng)加密技術(shù),它使用一對(duì)密鑰,即公鑰(Public Key)和私鑰(Private Key)。私鑰只能由一方安全保管,不能對(duì)外泄露,而公鑰則可以直接對(duì)外公開(kāi)。如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密。相反,如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,則只有用對(duì)應(yīng)的公開(kāi)密鑰才能進(jìn)行解密[4]。RSA 算法的安全性依賴(lài)于大數(shù)分解的困難性,密鑰的長(zhǎng)度通常達(dá)到千位,產(chǎn)生密鑰的過(guò)程比較復(fù)雜,運(yùn)算速度相較于對(duì)稱(chēng)密碼算法較慢[5]。但本研究中加解密過(guò)程都是在服務(wù)端實(shí)現(xiàn),借助現(xiàn)代計(jì)算機(jī)強(qiáng)大的運(yùn)算能力,RSA算法的這一缺點(diǎn)并不影響系統(tǒng)的整體性能。
海產(chǎn)品質(zhì)量溯源系統(tǒng)的總體設(shè)計(jì)分為信息采集和入庫(kù)、RSA 加密和二維碼生成、數(shù)據(jù)庫(kù)查詢(xún)和RSA解密。系統(tǒng)采用MVC 三層架構(gòu)[6],如圖1 所示。
圖1 溯源系統(tǒng)框架圖
數(shù)據(jù)層(模型)的開(kāi)發(fā),使用MySQL 數(shù)據(jù)庫(kù)設(shè)計(jì),數(shù)據(jù)庫(kù)中主要為海產(chǎn)品信息表和用戶(hù)信息表。此外為提高系統(tǒng)的可操作性和健壯性,減少信息冗余度,增加了魚(yú)類(lèi)名稱(chēng)表、海域名稱(chēng)表、企業(yè)名稱(chēng)表、飼料信息表等輔助表??刂茖优c數(shù)據(jù)層之間的接口采用Web Service 模式,控制層只能通過(guò)向Web 服務(wù)器提交數(shù)據(jù)寫(xiě)入或查詢(xún)請(qǐng)求才能獲得數(shù)據(jù)庫(kù)中的記錄,不直接訪問(wèn)數(shù)據(jù)庫(kù),從而有效提高數(shù)據(jù)的安全性。后臺(tái)管理由桌面系統(tǒng)和移動(dòng)終端App 兩個(gè)子系統(tǒng)構(gòu)成。桌面系統(tǒng)負(fù)責(zé)用戶(hù)管理、信息采集UI、數(shù)據(jù)庫(kù)維護(hù)等功能;移動(dòng)終端實(shí)現(xiàn)單件海產(chǎn)品的信息錄入、更新和查詢(xún)等功能。整個(gè)質(zhì)量溯源流程如圖2 所示。
圖2 海產(chǎn)品質(zhì)量溯源流程圖
該模塊又分為捕撈海產(chǎn)品信息采集和養(yǎng)殖海產(chǎn)品信息采集2 個(gè)子模塊。捕撈模塊信息由入庫(kù)人員人工輸入,主要采集海產(chǎn)品的基本信息、產(chǎn)地及存儲(chǔ)運(yùn)輸狀況,包括魚(yú)類(lèi)名稱(chēng)、大小條、重量、漁獲時(shí)間、漁撈海域、生產(chǎn)單位、儲(chǔ)藏信息和物流信息等。養(yǎng)殖模塊采集的信息除基本信息外,增加了養(yǎng)殖戶(hù)信息、養(yǎng)殖環(huán)境信息、投入飼料和用藥信息、檢測(cè)結(jié)果信息以及養(yǎng)殖加工過(guò)程監(jiān)控的視頻信息。系統(tǒng)對(duì)海產(chǎn)品從離岸到面向消費(fèi)者階段共記錄和管理了養(yǎng)殖、捕撈、加工、存儲(chǔ)、運(yùn)輸?shù)人协h(huán)節(jié)的數(shù)據(jù),每個(gè)階段都會(huì)有專(zhuān)人負(fù)責(zé)自己階段的記錄,在系統(tǒng)的相應(yīng)位置存入信息保存到數(shù)據(jù)庫(kù)中。為每個(gè)海產(chǎn)品賦予唯一的產(chǎn)品ID,當(dāng)一個(gè)產(chǎn)品的全部數(shù)據(jù)錄入完成,此產(chǎn)品ID 經(jīng)RSA 加密后與此海產(chǎn)品的信息一起存儲(chǔ)于數(shù)據(jù)庫(kù)中。
養(yǎng)殖和加工過(guò)程的監(jiān)控視頻保存于養(yǎng)殖戶(hù)和加工廠本地的服務(wù)器上,數(shù)據(jù)庫(kù)中存儲(chǔ)視頻的地址源信息和訪問(wèn)權(quán)限,監(jiān)管者掃描二維碼后獲得數(shù)據(jù)庫(kù)中的監(jiān)控視頻地址和權(quán)限,通過(guò)移動(dòng)終端即可查看視頻。
按照一物一碼的原則,編碼時(shí)無(wú)須對(duì)海產(chǎn)品分類(lèi)。利用系統(tǒng)運(yùn)行的即時(shí)性,設(shè)計(jì)編碼格式為14 位時(shí)間序列+10 位隨機(jī)數(shù)??紤]到系統(tǒng)運(yùn)行時(shí)的并發(fā)性,可能會(huì)導(dǎo)致同號(hào)ID,因此在編碼模塊上加入了synchronized屬性,使一個(gè)用戶(hù)正在生成ID 時(shí),其他用戶(hù)的線程處于等待狀態(tài),從而保證了ID 的唯一性。生成二維碼之前,先對(duì)ID 進(jìn)行RSA 加密,保證其安全性。RSA 加密算法及具體實(shí)現(xiàn)如下。
(1)密鑰生成。RSA 加密首先要自動(dòng)生成公鑰和私鑰,算法流程如圖3 所示。密匙生成后d、p、q作為私鑰存儲(chǔ)于本地,用于加密;n和e作為公鑰發(fā)布,用于解密。
圖3 密匙生成算法圖
(2)加密。選擇私鑰對(duì)海產(chǎn)品ID 加密,公式為
式中:m是明文,即待加密的編號(hào);C是加密以后的密文。
(3)解密。使用公鑰對(duì)密文解密,公式為
從公式上看,解密和加密算法的實(shí)現(xiàn)完全一樣,只是參數(shù)不同。公式中冪的計(jì)算是關(guān)鍵,以加密為例,m是24 位的數(shù)字串,經(jīng)過(guò)d次冪運(yùn)算后,長(zhǎng)度達(dá)到系統(tǒng)無(wú)法處理的大,并且其運(yùn)算時(shí)間長(zhǎng),影響整個(gè)系統(tǒng)的響應(yīng)速度。為降低運(yùn)算復(fù)雜度,冪運(yùn)算采用了快速取模指數(shù)算法,其原理為積的取余等于取余的積的取余,在此基礎(chǔ)上,對(duì)指數(shù)型的數(shù)據(jù)進(jìn)行拆解合并,實(shí)現(xiàn)過(guò)程如下。
步驟1:設(shè)m1=mmodn;初始化c=1。
步驟2:如果d為奇數(shù),則c=(c×m1) modn。
步驟3:遞推m1=(m1×m1) modn。
步驟4:d=d/2。
步驟5:如果d不等于0 轉(zhuǎn)步驟2 循環(huán),否則結(jié)束循環(huán)。
因?yàn)槊魑倪^(guò)長(zhǎng),所以加密前先將明文數(shù)字串分組,使得每個(gè)分組對(duì)應(yīng)的十進(jìn)制數(shù)小于n,即分組長(zhǎng)度小于log2n,然后對(duì)每個(gè)明文進(jìn)行分組,做上述公式(1)的加密運(yùn)算。
系統(tǒng)采用B/S 模式,選擇JAVA 做開(kāi)發(fā)工具,為了提高糾錯(cuò)的等級(jí),系統(tǒng)中調(diào)用了第三方庫(kù):com.google.zxing。先設(shè)置二維碼的屬性,再調(diào)用Zxing 中的QRCodeUtil.createImage 方法直接生成二維碼。二維碼的編碼由海產(chǎn)品ID 經(jīng)加密形成,寬度和高度由打印紙的大小自適應(yīng)設(shè)定,糾錯(cuò)等級(jí)設(shè)定為ErrorCorrectionLevel.H。輸出方式有兩種,一種是以ResponseEntity 的形式直接在頁(yè)面上顯示二維碼,可以直接打印輸出到包裝紙的指定位置;另一種是形成圖形文件存儲(chǔ)于服務(wù)器的特定位置,可延后打印或查詢(xún)。
消費(fèi)者和質(zhì)量監(jiān)管人員通過(guò)移動(dòng)終端上的App 掃描外包裝上的二維碼,獲得密文、服務(wù)器地址,以此密文為參數(shù)向Web 服務(wù)器提交請(qǐng)求。服務(wù)器先讀取加密系統(tǒng)中的私鑰,運(yùn)用公式(2)對(duì)二維碼中的密文進(jìn)行解密運(yùn)算,得到明文,即海產(chǎn)品的唯一ID。用此ID 對(duì)數(shù)據(jù)庫(kù)做多表鏈接查詢(xún),獲得對(duì)應(yīng)記錄的海產(chǎn)品所有數(shù)據(jù),并回傳至移動(dòng)終端,消費(fèi)者可由App 閱讀相關(guān)信息,監(jiān)管員還可以查看相關(guān)視頻。
系統(tǒng)在Eclipse 平臺(tái)上開(kāi)發(fā),移動(dòng)終端在Android系統(tǒng)上實(shí)現(xiàn),所做測(cè)試主要是功能測(cè)試。筆者選擇東海某水產(chǎn)品交易市場(chǎng)上的一單現(xiàn)貨交易做測(cè)試,采集信息如表1 所示。
表1 溯源信息表
輸入表1 信息后數(shù)據(jù)庫(kù)海產(chǎn)品信息表中形成一條記錄。該海產(chǎn)品ID 碼的前14 位由錄入時(shí)間生成,得“20230825092813”,后10 位隨機(jī)產(chǎn)生,組合后得ID為“202308250928131978106880”,添加此ID 到記錄中。
經(jīng)測(cè)試,RSA 加密中若p、q取6 位數(shù)以上,普通計(jì)算機(jī)上運(yùn)行的時(shí)間需幾十分鐘,嚴(yán)重影響系統(tǒng)效率;取5 位數(shù),系統(tǒng)運(yùn)行順暢,本次測(cè)試計(jì)算p得32 353,q得22 807。計(jì)算私鑰和公鑰,測(cè)試結(jié)果n=737 874 871,e=26 064。對(duì)上述ID 按4 位一組分組加密,加密后生成的密文為“662771623339365048430871894599543275 554055474556525738”,用此密文生成的二維碼如圖4所示。測(cè)試結(jié)果表明,RSA 算法雖然運(yùn)算時(shí)間較長(zhǎng),但較難破解,可有效保護(hù)信息的安全性,確保只有授權(quán)用戶(hù)才能夠訪問(wèn)相關(guān)數(shù)據(jù)。
圖4 對(duì)應(yīng)的二維碼圖
本文針對(duì)我國(guó)海產(chǎn)品質(zhì)量溯源措施尚存不足這一現(xiàn)象,提出并建立了基于二維碼技術(shù)的海產(chǎn)品質(zhì)量溯源系統(tǒng)。針對(duì)信息安全問(wèn)題,重點(diǎn)分析、驗(yàn)證了加密技術(shù)中RSA 算法的原理及實(shí)現(xiàn),解決了消費(fèi)者和監(jiān)管者對(duì)掌握海產(chǎn)品質(zhì)量信息的需求。通過(guò)實(shí)地運(yùn)行測(cè)試,系統(tǒng)總體上取得如期的效果。下一步可通過(guò)兩方面提升系統(tǒng)性能。①改進(jìn)加密算法,將RSA 與DES 算法結(jié)合起來(lái)加密,用DES 對(duì)明文加密,RSA 對(duì)DES 的密鑰加密,可以解決RSA 加密速度慢問(wèn)題。②將系統(tǒng)與微信、小程序、淘寶等當(dāng)前主流互聯(lián)網(wǎng)應(yīng)用結(jié)合,讓終端用戶(hù)使用更方便。