首页
社区
课程
招聘
[原创]如何使用超长位密码
发表于: 2018-4-22 07:17 9269

[原创]如何使用超长位密码

2018-4-22 07:17
9269
  如果密码很长它包含的信息量就很大,对穷举攻击和分析法都是致命的。但是密码长了其记忆和存储都是问题,下面就探索解决这一问题。要达到的效果是用户只需输入少量密码,而在程序中则使用大量的密码用于加密解密。这里是这样做的,加密程序随便取一固定数值A作为随机函数种子,程序的默认密码是以此种子生成的1000个字节的随机函数值作为默认密码,如果没有用户密码则使用默认密码完成加密解密,如果有用户输入的密码,则从用户输入密码中计算出一些参数,其中有偏移量B、参数C、D等,这样新的种子是 A+B×C+D,将新种子后面的1000个字节作为密码用于程序的接下来运算,用户输入密码在此起到钥匙的作用,并不直接用于加密运算。这样你就可以使用这1000个字节的密码去加密或解密了。实际应用中要使用多少位密码要参考文件长度来决定,这里只是举例说明。
  在上面的例子告诉我们如何得到大量的密码,下面说说如何使用这些密码。这些密码来自随机函数,相邻数据之间有一定的相关性,对此你可以使用倒序或重排等方法来消除这一影响。
  无论是流密码加密或分组密码加密,往往使用很少的密码就能完成一次加密,考虑这样的问题对大物体的细分,例如我们用显微镜去看大象,那我们只能看到细胞,而要通过这些细胞去合成大象是太费劲了,如果我们将被加密文件进行细分,而对每部分进行加密就可以充分的利用现有的密码资源,即使某一部分真被破解了,破解者也很难对明文整体有丝毫的认识,无论分析法和穷举攻击都会面临几乎不可实现的挑战,这就是使用大量密码加密的优势所在。
 当细分到加密一个字节就变换操作的时候,即使量子计算机出现也需要天量的时间才能破解,这样信息的安全就有保障了。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 7962
活跃值: (4714)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有道理  好方法
2018-4-22 14:19
0
雪    币: 45
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
用得着那么麻烦吗。。。
string  userkey  =  "fuckfuckfuck";
string  actualkey  =  "";
for  (int  i  =  0;  i  <  1000;  ++i)
{
actualkey  +=  hmac_md5(actualkey,  userkey);
}
想要多少字节都可以

最后于 2018-4-26 16:39 被zyla编辑 ,原因:
2018-4-26 16:37
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
到底是谁麻烦啊?楼上还需要借助其它加密函数,而这里只用通用的随机函数即可。
2018-4-28 11:53
0
雪    币: 357
活跃值: (3443)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
5
好像你有本事把超短位密码破解了一样
2018-4-28 13:08
0
雪    币: 576
活跃值: (2035)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感觉没用,攻击短位钥匙不是一样么
2018-4-28 14:18
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
7
@KooJiSung  真的没有那种本事。只是觉得密码长些更安全。
@fafasasa  程序在那种方式下,怕是你没地方去攻击短密钥。
2018-4-28 15:22
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
8
用较短的用户密码,算出种子,借助于MT19937,取随机函数值作为密码,具体应用是不要连续取值可以间断的取值例如取MT19937的值,隔开7个数据再次取值,直到取够为止,这样相对避免了一些随机函数相邻值之间的关联。
2019-4-23 15:39
0
游客
登录 | 注册 方可回帖
返回
//