java中的用户名和密码加密保存到txt文件中

来源:互联网 发布:权力的游戏山姆知乎 编辑:程序博客网 时间:2024/06/08 11:36
刚开始接触java公司让做一个界面,其中用到用户名和密码的保存,在网上找到了MD5的加密方法。
所谓MD5,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2、MD3、MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著名的公钥加密算法标准RSA的第一设计者R.Rivest于上个世纪90年代初开发出来的。MD5的最大作用在于,将不同格式的大容量文件信息在用数字签名软件来签署私人密钥前"压缩"成一种保密的格式,关键之处在于——这种"压缩"是不可逆的。 
为了让读者朋友对MD5的应用有个直观的认识,笔者以一个比方和一个实例来简要描述一下其工作过程: 
大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的"数字指纹",如果任何人对文件做了任何改动,其MD5值也就是对应的"数字指纹"都会发生变化。 
我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。 
笔者上面提到的例子只是MD5的一个基本应用,实际上MD5还被用于加密解密技术上,如Unix、各类BSD系统登录密码(在MD5诞生前采用的是DES加密算法,后因MD5安全性更高,DES被淘汰)、通信信息加密(如大家熟悉的即时通信软件MyIM)、数字签名等诸多方面。 
MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。 
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。 
MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的, 用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不“知道”用户的密码是什么。 
Java代码 
public String makeMD5(String password) {   
MessageDigest md;   
String pwd = null ;
   try {   
    // 生成一个MD5加密计算摘要   
    md = MessageDigest.getInstance("MD5");   
    // 计算md5函数   
    md.update(password.getBytes());   
    // digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符   
    // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值,这里生成的位数可以更改,省略的话 是十位  
    String pwd = new BigInteger(1, md.digest()).toString(16);   
    System.err.println(pwd);   
     
   } catch (Exception e) {   
    e.printStackTrace();   
   }   
  return pwd;  
}
我用的方法很笨,就是把注册的用户名密码,通过makeMD5()加密保存到txt文件中,他们之间用空格封开,当用户输入用户名和密码是还是通过makeMD5()加密之后和txt文件中的内容对比;
try {
//对文件 密码.txt 用输入流进行读
FileInputStreamfis=null;
InputStreamReader isr=null;
BufferedReaderbr=null;
//用一个 list 来保存文件中的内容
ArrayList list=null;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//定义一个布尔类型的l,来进行判断if()是否执行
Boolean l=false;
try {
fis=new FileInputStream("密码.txt");
isr=new InputStreamReader(fis);
br=new BufferedReader(isr);
list=new ArrayList();
//循环把文件中的内容按行读取到list中
while((username=br.readLine())!=null){
list.add(username);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i=0;i<list.size();i++){
//定义一个string来接受list中的内容
String Username=(String)list.get(i);
//getText()是读取组件中的内容,用户和密码经过MD5加密之后和list中的内容逐一进行比较
if(Username.equals(makeMD5(name.getText())+" "+makeMD5(passWord.getText())))
{
//如果正确那么就改变l的值,进行if()中的语句,并跳出循环
l=true;
break;
}
}
if(l)
{
}
0 0
原创粉丝点击