现在人们越来越多地使用网络来进行交流、进行信息交换,如何保证信息的安全是一个很重要的间题,下面我们就通过在汉字中应用RSA加密算法,使用C语言实现汉字的加密和解密。
对汉字的加密、解密,采取先对单个字进行加、解密,进而实现对整个句子进行加、解密的方法。
(1)汉字数字化
汉字不是数字,因此不能直接应用RSA加密算法进行加、解密,需要先对其进行数字化。汉字的数字化以及数字的汉字化可以借助Office办公软件中的Excel来完成,在的Excel来中有两个函数code()和char(),利用“code(汉字)”可以将一个汉字转化为一个5位的整数,利用"char(数字)”可以将一个符合要求的5位数字转化为一个汉字,如在的Excel来中输入“CODE(“我”)”,可得到数字“52946”,输入“CHAR (“49864”)”,可得到汉宇“壶”。
(2)对每一位数加密
根据C语言的特点,C语言的变量的取值范围有限,无法直接得到RSA加密算法需要的数字,因此先对5位数中的每一位数字进行加密,然后由每位数字对应的密文组成该汉字对应的密文,每一位数字对应的密文用两位数字表示,如明文中的“6”对应的密文用“30”表示,明文中的“1”对应的密文用“01”表示。
编写的对一位数进行加、解密的C语言程序如下:
通过运行程序知,0,1,2,3,4,5,6,7,8,9对应的密文分别为0,1,29,9,16,14,30,28,2,15。
(3)对汉字的加密
将汉字对应的数字的每一位加密后,由每位对应的两位密文可以组成汉字对应的10位的密文,如:汉字“我”数字化后为“52946",对应的密文为“1429151630”,编写的C语言程序如下:
通过运行程序,输入汉字“我”对应的数字“52946”,得到密文“1429151630.00000”,将其变为整数,即为“1429151630”。如果要加密“我是中国人”这句话,先将其数字化为“5294651911 _54992 _47610 _51403”,然后分别进行加密,得到密文“1429151630 _14011501011416151529 _16283001001401160009”。
(4)对加密后的汉字进行解密
得到密文后,利用密钥d对其进行解密,即可得到原文。
编写的C语言程序如下:
仍然以“我是中国人”为例,其加密后的数据为“1429151630 _14011501011416151529 _16283001001401160009”,对每个数进行解密,即得到明文“5294651911 _54992 _47610 _51403”,然后汉字化即为“我是中国人”。
小知识之RSA加密算法
RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。