首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

强密码的生成算法.解决方法

2012-02-01 
强密码的生成算法. 今天写了这个生成密码的程序,谁有更好算法,大家讨论一下./**使用linux,unix时,需要经常

强密码的生成算法.

今天写了这个生成密码的程序,谁有更好算法,大家讨论一下.


/*
*   使用   linux   ,   unix   时,需要经常更改密码。这个程序可以帮你生成强密码   .
*
*等等,什么是强密码?
*
*现时基本上都是把字符分成四类:数字、小写英文、大写英文、符号,然后按照长度及组合
*复杂度来直接判断强弱程度:单一,是弱密码。   两两组合,是中密码。   超过两种组合,是强
*密码。当然,这只是一个粗略的判定,密码强度还跟密码长度、使用者习惯等因素有关。想
*知道自己所选择密码的强度,可以直接在微软的这个网站
*http://www.microsoft.com/china/athome/security/privacy/password_checker.mspx
*输入自己的密码,就可以知道密码的强度了。
*
*   使用方法:   1,   java   Passwd     (   可以生成一个   8   位的密码.)
*                       2,   java   Passwd   n   (   n> =5   ,   可以生成一个   n   位的密码   )
*
*/

public   class   Passwd   {

public   static   void   main(String[]   args){

String[]   pswdStr   =   { "qwertyuiopasdfghjklzxcvbnm "   ,  
"QWERTYUIOPASDFGHJKLZXCVBNM "   ,
"0123456789 "   ,
"~!@#$%^&*()[]\\; ',./{}|:\ " <> ?-_+= "   ,
};

int   pswdLen=   8   ;//设置密码的默认长度
String   pswd   =   " "   ;//密码

//根据传入的参数,设置密码长度
if(   args.length   >   0   ){
String   lenStr   =   args[   0   ]   ;

try{
pswdLen   =   Integer.parseInt(   lenStr   )   ;
}catch(   Exception   e   ){
System.out.println(   "请输入有效的密码长度! "   );
System.exit(   0   )   ;
}

if(   pswdLen   <   5   ){
System.out.println(   "密码长度必须大于   5   ! "   );
System.exit(   0   )   ;
}
}

//   chs   用于存放密码的字符   .
char[]   chs   =   new   char[   pswdLen   ]   ;

//这个循环用于保证密码包含四种字符.
for(   int   i=0   ;   i <pswdStr.length   ;   i++   ){

int   idx   =   (   int   )(   Math.random()*pswdStr[   i   ].length()   );
chs[   i   ]   =   pswdStr[   i   ].charAt(   idx   )   ;

}
//这个循环用于保证密码的长度.
for(   int   i=pswdStr.length   ;   i <pswdLen   ;   i++   ){

int   arrIdx   =   (   int   )(   Math.random()*pswdStr.length   );
int   strIdx   =   (   int   )(   Math.random()*pswdStr[   arrIdx   ].length()   );

chs[   i   ]   =   pswdStr[   arrIdx   ].charAt(   strIdx   )   ;
}

//   打乱   chs   的顺序
for(   int   i=0   ;   i <1000   ;   i++   ){
int   idx1   =   (   int   )(   Math.random()*chs.length   );
int   idx2   =   (   int   )(   Math.random()*chs.length   );

if(   idx1   ==   idx2   ){
continue   ;
}

char   tempChar   =   chs[   idx1   ]   ;
chs[   idx1   ]   =   chs[   idx2   ]   ;
chs[   idx2   ]=   tempChar   ;
}

pswd   =   new   String(   chs   );


System.out.println(   pswd   );
}


}


[解决办法]
支持一下

蛮不错的, 略嫌简单了点...
[解决办法]
这样的密码能记得住吗?
[解决办法]
密码到了 11位以上,如果用比较强悍的加密算法,基本上都不会给破了
破密码是基于大家使用密码的习惯而已

所以 所谓的强密码,也只能防墙外的君子而已

个人意见....
[解决办法]
I KNOW,THANKS

热点排行
Bad Request.