假定我们使用上述实例代码,把对应的功能移植到C/S两端,
那么一次完整的数据加密以及数据的传输参考流程如下:
记住一点,只要双方设置相同的keygen和同步码,那么密码机吐出来的密钥就是相同序列,
客户端发送每发送一个报文,就把自己的明文同步码一起发送给服务器,
服务器根据提前发送给客户端的keygen和同步码就可以实现解密操作,
虽然你可以看到明文的同步码,
但是还需要破解密码机算法、服务器下发的keygen密文。
加密软件原理实现加密算法的主要问题是如何产生随机序列作为密钥。本例是借用库函数rand() 原型如下:
#include int rand(void);函数rand() 虽然可以产生随机序列,但是每次产生的序列其实顺序是一样的。
#include stdio.h main() int i = 0; for(i=0;i i++) printf("%d ",rand()); putchar('\n');运行结果如下:
peng@peng-virtual-machine:/mnt/hgfs/peng/rand/code$ ./a.out 1804289383 846930886 1681692777 1714636915 1957747793 424238335 719885386 1649760492 596516649 1189641421 peng@peng-virtual-machine:/mnt/hgfs/peng/rand/code$ ./a.out 1804289383 846930886 1681692777 1714636915 1957747793 424238335 719885386 1649760492 596516649 1189641421要想每次都产生不一样的随机序列应该怎么办呢?需要借助srand()函数
void srand(unsigned int seed);只需要通过该函数设置一个种子,那么产生的序列,就会完全不一样,
通常我们用time()返回值作为种子,
在此我们随便写入几个数据,来测试下该函数
#include stdio.h main() int i = 0; srand(111); for(i=0;i i++) printf("%d ",rand()); putchar('\n'); srand(1111); for(i=0;i i++) printf("%d ",rand()); putchar('\n');执行结果如下:
peng@peng-virtual-machine:/mnt/hgfs/peng/rand/code$ ./a.out 1629905861 708017477 1225010071 14444113 324837614 2112273117 1166384513 1539134273 1883039818 779189906 1383711924 882432674 1555165704 1334863495 1474679554 676796645 154721979 534868285 1892754119 100411878可见输入不同的种子就会产生不同的序列。
函数原型如下:
图片本例原理比较简单,没有考虑太复杂的应用(比如多路密钥的管理)和数据安全性,
只阐述加解密的流程,仅作为学习理解加解密流程用,此种加密算法属于对称加密,相对比较简单,还是比较容易破解。
目前市场上都是由专业的公司和团队实现加解密功能。现在区块链常用的算法,如sha256,都是继承单向函数的设计思维,一个方向计算容易,反过来几乎不能破解,来保证安全。[来源:一口linux]
延伸阅读:密码三要素:明密文,密钥和算法。算法就是你说的“加密原理”。要解密,还要知道密钥。现代密码的基本要求之一就是:密码的安全性不依赖于加密方法的保密。也就是说,破译方即使知道加密方法和密文,不知道密钥也无法还原出明文。
”内鬼“员工越权访问,窃取机密数据被判刑
如何通过加密软件保护数据安全?
剖析数据加密算法以及加密系统架构
企业安装加密软件能防止重要文件被拷贝复制吗?
市面上的加密软件有哪些功能?加密软件选购攻略