首页
社区
课程
招聘
[讨论]密码的复杂化
发表于: 2013-8-11 08:16 5972

[讨论]密码的复杂化

2013-8-11 08:16
5972
  文件加密软件需要用户输入密码,但有时用户输入的密码过于简单,简单的密码直接用作加密软件的参数是不会有好结果的,因为那种密码本身所携带的信息量太少了,所以有必要使密码复杂化。
复杂化效果的基本要求:
      1)字节数据转变为整形数据
      2)变换是不可逆的,不可溯源的
      3)重复的字符将有不同的变换
  方法多得是,例如可以用随机函数、哈希函数、CRC函数等处理密码使其衍生出形形色色的数据,其实只用四则运算就足矣且看下一小例(C语言描述):
char *str="11111111111111111111111111111111";
unsigned int mm[100];

for(i=0;i<strlen(str);i++)
{
mm[i]=str[i]*19773161;
mm[i]=mm[i]%(i+1373);
mm[i]=mm[i]*mm[i]*mm[i]+101;
mm[i]=mm[i]>>1;
}
  通过这样简单的运算,就可以使32个一样的ASCII码 "11111111111111111111111111111111",变成32个成员的无符号数组(16进制表示):
49a6b932 4d30963 d4a4812 78f1747 193d09 9a9c6ba 137d6952 9bf71bb 183c58 7231c8d b7fa332 2ff186b 35526cae 3fd2ec 3d0932 342513b9 289e732 9545bce 4764898 4f2d54af 2cea97e 4436dcc 37b4b6 1305abb5 2aa8fc6e 1cd46275 29bca12 14f060c7 176f39e4 4c57d62 2d351ce5 473a1967
  上面的运算每个密码字节都是独立运算的,如果交叉运算将更复杂,实现不可逆的关键是用了模运算%和右移运算>>,有了不可逆运算想靠后面的数据推出前面的数据就困难了,重复的用户密码能有不同的结果是循环变量在运算中起的作用。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没看明白楼主要表达的意思是什么?告诉要复杂化密码还是说复杂化密码有很多方法|?
2013-8-11 11:34
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
汗死……又自己创造术语……
第一点千万别用哈希算法,尤其是你们自己乱改的,碰撞率会巨高……说不定你一个几千位的密码会和一位密码搞出来的哈希一样
第二点实际上现代的对称加密算法就是对密钥进行扩展,你这玩意也好意思标原创,上个世纪的概念……
你这个东西实际上就是对密钥多扩展一遍……没什么意思……相当于把rc6 aes的轮数调大一点
2013-8-11 13:07
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
  交流一下,这方面大家的经验。没看那么多上世纪的东西,个人看法而已。自己随便写的东西当然是原创了。
  哈希函数多了,随机函数多了,自己可以观察效果,一个中间过程的变量讲什么碰撞率?
  这只是最初级的变换,由于用户密码是字节变量而许多运算是整形变量,所以有必要变换一下。
  密码学并没统一的标准,不要像红白博士那样指导别人该怎么做,那这是你的观念而已。字不是几千年前就有了吗,大家不是还用吗?
2013-8-11 13:33
0
游客
登录 | 注册 方可回帖
返回
//