Skip to content

zhangbin1997/linux-MD5-base64

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

linux下MD5算法和base64算法共同实现的证书加密和解密(校验)

本文是一种证书加密方式,总共采用了MD5加密算法和base64加密算法。

MD5加密算法是一种无法还原的加密算法,也就是说,你用md5加密后生成的结果无法还原成原来的内容,是不可逆的,因此可靠性较高,MD5算法加密后生成的结果长度固定为16字节。

base64加密算法是一种相对简单的加解密算法,是可以进行加密和解密操作的算法,因此可以对加密后的结果再进行解密还原出原来的内容,安全性较低一些,base64算法加密后生成的结果长度固定为16字节。

本文不对两种加密算法原理进行讲解,这里主要是应用两种加密算法来进行加密,来保障可靠性和安全性。

本文采用的MD5加密算法是linux系统自带的一个功能,其头文件是openssl/md5.h,需要使用此功能需要安装openssl, 执行命令yum install openssl openssl-devel -y 即可进行安装。

本文中也提供了MD5加密算法的源码版本,源码实现版本与系统提供的功能使用方法基本一致,差别仅在调用函数时,参数位置不一致而已,有需要的同学可以根据代码进行替换,源文件为md5.c和md5.h。

本文采用的是base64源码版本的实现,源文件为base64.c和base64.h,此源码本人亲测多次,没有出现bug;因为本人参考过近20种网上的base64源码,都存在bug。

本文具体所实现的功能为根据命令行用户自己输入的日期(例如:20201010),首先对日期格式进行判断,然后根据用户自定义的前缀(此前缀是由用户自己定义的)加上日期拼接成一个字符串A(例如:abcd20201010),

然后对字符A进行MD5加密后生成字符串B,再对字符串A进行base64加密生成字符串C, 然后按照C在前,B在后的前后顺序,拼接字符串C和B生成字符串D,最后对字符串D进行base64加密生成最终的字符串E;之所以进行

如此繁琐的加密方式,是为了保证安全性和可靠性,有能力读懂代码的同学,可以自行根据需求进行相应加密方式的改变。

然后将最终经过多次加密生成的字符串E写入文件中,本文文件存储的路径为/etc/dcfile/license,用户可以自行定义存储位置,记住文件存储位置的目录必须存在,如果目录不存在,记得手动生成该目录,使用mkdir命令。

上半部分是加密过程的实现,源文件为Encryption.c。

接下来是解密过程的实现,也可以称做校验过程的实现,源文件为Decryption.c。

首先从文件中读出加密后的内容,即字符串E,然后对字符串E进行base64解密,得到字符串D,因为字符串D是由字符串C和B拼接成的,因此将字符串D分成对应的两部分,即字符串B和字符串C,因为字符串B是用MD5算法

加密的,是不可逆的,因此无法还原字符串B加密前的内容,所以解决方案为对用base64加密的字符串C用base64解密算法进行解密,即可得到字符串A,然后对字符串A进行MD5加密,得到字符串A1,如果A1和字符串B内容

完全一致,表明文件内容并未被修改,因此来判断可靠性和安全性。

如果文件未被修改,则将解密出来的字符串A,即解密出来的日期序列,和当前系统日期进行比较,来判断证书有效日期,判断证书是否过期和还有几天过期。

About

证书加密方式,总共采用了MD5

Resources

Stars

Watchers

Forks

Packages

No packages published