这里我们尝试安全加密,下述方法可能有漏洞、也可能有冗余的操作,欢迎批评指正。
一、文件加密
a.得到密钥
对密钥的要求是真随机数组,这些数据从来没有展示过,并且在第一次使用完后立即销毁。真随机数可以来自专用的发生器、或采自随机的物理事件,在使用前再做一次检验,发现不均匀或者有连续0等严重缺陷加以修补。
b.加密明文
首先需要得到用户密码,用户密码的作用是控制程序流程,随意选取一段和明文长度一样的真随机数组成工作密钥数组。用这个数组加密明文,根据用户密码选取明文串和密钥串的运算起点,和运算方向,加密算法采用无符号的加法(解密用减法)。
加密完成后得到密文数组装入密文文件A。
c.密钥处理
工作密钥串在解密时还要用到,需要妥善保护。这里的做法是程序里准备几个长周期性能优良的随机函数,用它们组合成多种加密方式供用户选择使用,用于加密工作密钥串得到密文文件B,随机函数的种子由用户密码通过计算得到,加密算法采用无符号的加法(解密用减法)。
d.数据完整性处理
为了确保数据的完整性,计算文件A和B的32位CRC值附在文件后面,用于检查文件的完整性。
现在加密已经完成,文件A和B可以保存或传递了。
二、文件解密
a.得到文件A和B,做完整性检测。
b.解密文件B
首先需要得到和加密时一样的用户密码,选择和加密时一样的方式进行解密,得到工作密钥。
c.解密文件A
有了工作密钥就可以解密文件A得到明文了。
三、用户密码的传递
通信双方除了使用相同的软件外。需要使用相同的用户密码和加密(解密)方式。最稳妥的方式是事前约定,例如第一次用什么密码什么方式、第二次用什么密码什么方式...。也可以通过其它加密软件加密后用电子邮件传递。也可以用电话密语传递信息。也可以指定一部字典,规定一些方式得到信息,到时候用电话(短信)传递页码就可以了。