对文件进行数字签名

来源:互联网 发布:淘宝上有卖A片吗 编辑:程序博客网 时间:2024/06/07 12:15

未整理:

对文件进行数字签名大致上是这样做的,当用户连接设备的会话结束以后,系统对LOG文件后面再上一串固定的字符串(64个字符差不多了,需保密),然后用MD5进行hash,这样将得到一串128位的hash,把它存储到数据库。每次检验的时候,用以上算法对log文件重新计算一遍,如果结果跟数据库里面的一致,就说明文件没有被修改,否则就有问题

 
而且敲进去的命令行本身也有log下来,这个用户是没办法改的
 
固化在程序里面
 
这几个字符不追加到文件内=
 
包括iphone的签名算法都是这样做的
 
那样不行,别人也可以做同样的操作,然后生成同样的签名
 
固化在程序里面用户签名的私钥,最好用一个简单的算法来生成,避免被直接查看资源的方式就破解
 
那时候文件被你打开了,他应该没办法保存
 
 
md5算法,原有的代码里面有一个类
 
 
 
 

Hash算法不管是MD5也好SHA1也好. 他们都是一种散列算法,其算法的特点是,可以把任意长度的字符串经过运算生成固定长度的字符串,并且这个产生的字符串代表着原来字符串里的所有字符。
简单的举个例子,就拿我上面说的那个帖子里面的 kc_ren(天堂龙)的例子:

admin 加密后:
16位8f00b204e9800998
32位d41d8cd98f00b204e9800998ecf8427e

其中不管是16位也好,32位也好其生成的字符串8f00b204e9800998 (16bit)或者d41d8cd98f00b204e9800998ecf8427e(32bit)他们表示着admin这个原始字符串.

只要admin这个字符串没有变,不管怎样重复使用MD5或者SHA1进行重新运算,其结果保持不变。

利用这个特点,在计算机安全学上,我们使用这种算法来保证数据完整性(Integrity)
这里提到计算机安全学,我在这里扩充一下:简单的概述计算机安全学,其实就是一门在讲关于 CIA
的学科。 C = Confidentiality (机密性), I = Integrity (完整性), A = Avalibility(可用性)

显而易见Hash算法,是用来保证 Integrity的算法。什么叫做完整性,不单单指数据不丢失,并且要保证数据没有被非法修改过。举个简单的例子。

比如:A 发了一个Email给B内容为"Hello",因为我们目前使用的以太网的特点,任何人在网络上都有可能截获这封Email,任何人都有可能,修改Hello这个字符串。那么当B收到这封A发来的Email的时候,怎么确定这封Email在传送过程中没有被修改过呢? 我们就使用了Hash算法来保证数据的完整性。他的工作方式是这样的:

1.A写一封Email内容为Hello
2.A用Hash算法对Hello进行编码(这里我用了编码,没有用加密这个词)
3.A将原始Email Hello 以及经过Hash算法编码过后的digest(原始Email的摘要信息)一起发送给B
  (因此,A给B发的Email由2部分组成,1是原始的Hello,2是经过Hash编码的摘要信息)

4.B接收到了A的Email,首先分离由2部分组成的邮件。
5.B通过Hash算法,根据收到的Email的内容,重新计算出该Email的摘要信息.
6.B将自己计算出的摘要信息和收到的摘要信息进行比较,如果比较结果一样,则认为这封Email在中途没有被修改过,否则的话,这封Email在中途一定被修改过,因此内容不可信。

至此,保证了原始数据的完整性。
很多人在使用Hash算法在对密码进行所谓的加密,其实是不妥的。这样做的最终结果最多最多就是能够让使用的这个软件的人放心。放心什么呢?放心的就是他们在你的软件里面所保存的密码,开发软件的人不能获得。除此之外,没有其他任何价值。如果一定要说出其他的价值的话。也就是如果开发软件的人员或者维护该软件的人员不小心将含有客户密码数据的数据库泄密的话,得到这个数据库的人,无法从数据库中获得那些客户的密码。 但是,大家想想清楚,我都获得了数据库的数据,我还需要那些密码干什么呢?

原创粉丝点击