-
-
[讨论]密码的复杂化
-
发表于:
2013-8-11 08:16
5971
-
文件加密软件需要用户输入密码,但有时用户输入的密码过于简单,简单的密码直接用作加密软件的参数是不会有好结果的,因为那种密码本身所携带的信息量太少了,所以有必要使密码复杂化。
复杂化效果的基本要求:
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期)