RSA加密算法在自動發(fā)藥機(jī)中的應(yīng)用

大家都知道,自動發(fā)藥機(jī)中的每一味藥都是由唯一的16位條碼標(biāo)識的,醫(yī)生開出處方之后,將藥名以及各味藥的用量發(fā)送給自動發(fā)藥機(jī)控制系統(tǒng),然后根據(jù)其中包含的信息進(jìn)行發(fā)藥。為了防止在藥品發(fā)送過程中,被入侵者監(jiān)聽,因此,我們采用RSA加密算法將其加密,只有擁有RSA私鑰者,才能將其解密,就保證了處方信息的安全性。

RSA加密算法在自動發(fā)藥機(jī)中的加密原理:

因為我們要加密的就是藥品的條碼信息,而在數(shù)據(jù)庫中,條碼是CString類型,考慮到數(shù)據(jù)的存儲范圍,所以我們用CString的mid方法把16位條碼分成4段,將每4位轉(zhuǎn)化為對應(yīng)的整數(shù),然后將其加密,解密時,將每一個密文分別用私鑰解密之后,還原成對應(yīng)的字符串,然后連接在一起,成為16位條碼。

RSA加密算法在自動發(fā)藥機(jī)中的應(yīng)用實例:

假如醫(yī)生所開處方中,有一味藥“白果仁”,要將其用RSA加密。

首先,需要查詢數(shù)據(jù)庫,得出它對應(yīng)的條碼是“0013010000072383”,將16位條碼當(dāng)作參數(shù)傳給RSA類中的RsaTotEncry。在RsaTotEncry方法中,將條碼分成四段,“0013”、
“0100”、“0007”、“2383”;將這四個串分別轉(zhuǎn)化成四個整數(shù):13、100、7、2383;每一個整數(shù)作為參數(shù),傳給RSA的RsaSinFncry,將隨機(jī)產(chǎn)生的數(shù)值47、71分別賦給p,q,n=p*q=3337,φ(n)=(p-1)*(q-1)=3220;經(jīng)過下圖所示的過程,得到的密鑰P= 2257。

在經(jīng)過下面的過程,得出d= 3113;加密之后,四個整數(shù)對應(yīng)的密文分別是:2385、1626、3257、217;將加密之后的信息組合成條碼“2385162632570217”作為傳送的內(nèi)容,發(fā)送給發(fā)藥機(jī)控制系統(tǒng)。

接下來,發(fā)藥機(jī)控制系統(tǒng)收到醫(yī)生發(fā)來的處方信息之后,需要解密藥品條碼.將各個密文分別作為參數(shù)傳給RSA的Decrypt,調(diào)用模指數(shù)運算,將各密文還原成明文:13、100、7、2383;將各個整數(shù)轉(zhuǎn)化為對應(yīng)的四位字符,不足四位的,前面補“0”,最后連接變成了“0013010000072383”,這樣,就實現(xiàn)了一個條碼文件加密解密的過程。

如果在發(fā)送過程中,有入侵者偵聽到發(fā)送的包,他得到的條碼信息將是“2385162632570217”,而在數(shù)據(jù)庫中,并不存在條碼為“2385162632570217”的藥品,故而處方信息得到了
保密。

在發(fā)藥機(jī)系統(tǒng)中,加密行為發(fā)生在傳送處方信息之前,解密行為發(fā)生在存儲處方信息之前,這與提取處方信息然后發(fā)藥的過程并不會有重疊部分,所以,在自動發(fā)藥機(jī)系統(tǒng)中采用RSA加密算法,并不會降低自動發(fā)藥機(jī)的工作效率。

小知識之RSA加密算法RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。RSA算法基于一個十分簡單的數(shù)論事實:將兩個大素數(shù)相乘十分容易,但那時想要對其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。