简单密匙加密解密

加密的原理为:

读入src,将src与key进行某种操作,便得到加密后的结果,解密时,需要用相同的key来进行解密.简单点就是result = fn(src, password, operator) src为需要加密的, password为对应密码,operator为相应加密操作(就是result = src <operator> password),返回的便是加密的结果.这里将src与password做了操作,所以在不知password的情况下,是不能从result解出src

大多数软件员写的加密程序(不包括市面上的那些比如"高强度加密大师等是骗钱软件")采用这种方法.

比如:

要加密int src[] = {11111111, 11111110, 11111100, 11111000}这段信息(二进制).

假设加密的操作为异或操作(^).

输入的密码为11111111(二进制)

将src[]与 11111111进行异或(^)操作.

则加密后的数据为{0000000, 00000001, 00000011, 00000111}(二进制)

解密的时候只要对加密后的数据再次进行与密码进行异或(^)操作即可.

在不知道密匙(密码11111111)的情况下,得到原始的数据是不可能的.如果输入一个错误的密码进行解密,其最终的结果也只是得到错误的数据而已.

于是将其应用到程序上,好似也无法破解.

可是作者或使用者往往忽略了一点:如果对应的加密后的信息的某一部分的原形是已知的,并且在你的加密方法足够简单的时候(即使你的加密是相当的复杂,也仅仅是多花了点时间),便有机可乘了.

比如对于rar文件.用ultraedit打开随便一个rar便可知道,rar的前20个字节是固定的.如果用上面的加密方法进行加密.如果密码设置为password[] = {0x65, 0x66, 0x67, 0x68}(就是字符串"ABCD")

rar文件的头几个字节为52 61 72 21    // 字符串rar! 16进制

那么进行加密后的文件的头4个字节必然是55 7 21 66

解密者在不知道密码("ABCD")的情况下,完全可以通过原始数据固定的头4个字节值来获得密码的值.

具体操作为:0x52 ^ 0x55

                0x7   ^ 0x61

                0x21 ^ 0x72

                0x66 ^ 0x21

结果必然是{0x65, 0x66, 0x67, 0x68}(就是字符串"ABCD")

当然这有很多限制.比如对于纯文本txt来说,原文件并没有头部信息,所以无法破解.

这里的破解是对相当简单的加密而言,并且知道密码的长度为4位.但是对于rar文件来说,其头20个字节是已知的,完全可以枚举有限种可能的结果,半猜半解的解密.对于其他某几个字节是固定的文件类型也有相同的问题.虽然增强加密强度可以加大破解难度,但这也只是增加破解者的一点时间而已.

避免这类安全隐患有相当多的方法,最简单的便是对已知的几个字节不加密(对于rar文件,则不加密其头20个字节).这样解密者就不能找到蛛丝马迹了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值