大家都知道,自动发药机中的每一味药都是由唯一的16位条码标识的,医生开出处方之后,将药名以及各味药的用量发送给自动发药机控制系统,然后根据其中包含的信息进行发药。为了防止在药品发送过程中,被入侵者监听,因此,我们采用RSA加密算法将其加密,只有拥有RSA私钥者,才能将其解密,就保证了处方信息的安全性。

RSA加密算法在自动发药机中的加密原理:

因为我们要加密的就是药品的条码信息,而在数据库中,条码是CString类型,考虑到数据的存储范围,所以我们用CString的mid方法把16位条码分成4段,将每4位转化为对应的整数,然后将其加密,解密时,将每一个密文分别用私钥解密之后,还原成对应的字符串,然后连接在一起,成为16位条码。

RSA加密算法在自动发药机中的应用实例:

假如医生所开处方中,有一味药“白果仁”,要将其用RSA加密。

首先,需要查询数据库,得出它对应的条码是“0013010000072383”,将16位条码当作参数传给RSA类中的RsaTotEncry。在RsaTotEncry方法中,将条码分成四段,“0013”、
“0100”、“0007”、“2383”;将这四个串分别转化成四个整数:13、100、7、2383;每一个整数作为参数,传给RSA的RsaSinFncry,将随机产生的数值47、71分别赋给p,q,n=p*q=3337,φ(n)=(p-1)*(q-1)=3220;经过下图所示的过程,得到的密钥P= 2257。

在经过下面的过程,得出d= 3113;加密之后,四个整数对应的密文分别是:2385、1626、3257、217;将加密之后的信息组合成条码“2385162632570217”作为传送的内容,发送给发药机控制系统。

接下来,发药机控制系统收到医生发来的处方信息之后,需要解密药品条码.将各个密文分别作为参数传给RSA的Decrypt,调用模指数运算,将各密文还原成明文:13、100、7、2383;将各个整数转化为对应的四位字符,不足四位的,前面补“0”,最后连接变成了“0013010000072383”,这样,就实现了一个条码文件加密解密的过程。

如果在发送过程中,有入侵者侦听到发送的包,他得到的条码信息将是“2385162632570217”,而在数据库中,并不存在条码为“2385162632570217”的药品,故而处方信息得到了
保密。

在发药机系统中,加密行为发生在传送处方信息之前,解密行为发生在存储处方信息之前,这与提取处方信息然后发药的过程并不会有重叠部分,所以,在自动发药机系统中采用RSA加密算法,并不会降低自动发药机的工作效率。

小知识之RSA加密算法RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。