J2EE学习经验:JSP学习总结
posted @ 2007-05-09 11:42 Shawn Zhang 阅读(222) 评论(0) 编辑
2007年5月9日 #
posted @ 2007-05-09 11:42 Shawn Zhang 阅读(222) 评论(0) 编辑
package com.neusoft.jiami;
import java.io.File;
import java.io.FileOutputStream;
import java.security.SecureRandom;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
class Key {
private String keyName;
public Key(String keyName) {
this.keyName = keyName;
}
public void createKey(String keyName) throws Exception {
// 创建一个可信任的随机数源,DES算法需要
SecureRandom sr = new SecureRandom();
// 用DES算法创建一个KeyGenerator对象
KeyGenerator kg = KeyGenerator.getInstance("DES");
// 初始化此密钥生成器,使其具有确定的密钥长度
kg.init(sr);
// 生成密匙
SecretKey key = kg.generateKey();
// 获取密钥数据
byte rawKeyData[] = key.getEncoded();
// 将获取到密钥数据保存到文件中,待解密时使用
FileOutputStream fo = new FileOutputStream(new File(keyName));
fo.write(rawKeyData);
}
public static void main(String args[]) {
try {
new Key("key.txt");
} catch (Exception e) {
e.printStackTrace();
}
}
}第二步,对我们所要进行加密的类文件进行加密。
比如我有一个DigestPass类,已经被正常编译好生成DigestPass.class文件。此时,这个类文件是任何人都可以用的。因为系统的类加 载器可以自动的加载它。那么下一步,我们要做的就是把这个类文件加密。使系统的类加载器无法读取到正确的字节码文件。参考代码如下:
package com.neusoft.jiami;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class JiaMi {
public static void main(String[] args) throws Exception {
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 获得密匙数据
FileInputStream fi = new FileInputStream(new File("key.txt"));
byte rawKeyData[] = new byte[fi.available()];
fi.read(rawKeyData);
fi.close();
// 从原始密匙数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(rawKeyData);
// 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance("DES");
// 用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, key, sr);
// 现在,获取要加密的文件数据
FileInputStream fi2 = new FileInputStream(new File("DigestPass.class"));
byte data[] = new byte[fi2.available()];
fi2.read(data);
fi2.close();
// 正式执行加密操作
byte encryptedData[] = cipher.doFinal(data);
// 用加密后的数据覆盖原文件
FileOutputStream fo = new FileOutputStream(new File("DigestPass.class"));
fo.write(encryptedData);
fo.close();
}
}
package com.neusoft.jiami;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import com.neusoft.classloader.MyClassLoader;
public class JieMi {
public static void main(String[] args) throws Exception {
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 获得密匙数据
FileInputStream fi = new FileInputStream(new File("key.txt"));
byte rawKeyData[] = new byte[fi.available()];// = new byte[5];
fi.read(rawKeyData);
fi.close();
// 从原始密匙数据创建一个DESKeySpec对象
DESKeySpec dks = new DESKeySpec(rawKeyData);
// 创建一个密匙工厂,然后用它把DESKeySpec对象转换成一个SecretKey对象
SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(dks);
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance("DES");
// 用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, key, sr);
// 现在,获取数据并解密
FileInputStream fi2 = new FileInputStream(new File("DigestPass.class"));
byte encryptedData[] = new byte[fi2.available()];
fi2.read(encryptedData);
fi2.close();
// 正式执行解密操作
byte decryptedData[] = cipher.doFinal(encryptedData);
// 这时把数据还原成原有的类文件
// FileOutputStream fo = new FileOutputStream(new
// File("DigestPass.class"));
// fo.write(decryptedData);
// 用解密后的数据加载类并应用
MyClassloader mcl = new MyClassloader("E:/");
Class cl = mcl.loadClass(decryptedData, "com.neusoft.jiami.DigestPass");
DigestPass dp = cl.newInstance();
}
}posted @ 2007-05-09 11:15 Shawn Zhang 阅读(661) 评论(0) 编辑
(一)消息摘要简介
一个消息摘要就是一个数据块的数字指纹。即对一个任意长度的一个数据块进行计算,产生一个唯一指印(对于SHA1是产生一个20字节的二进制数组)。消息 摘要是一种与消息认证码结合使用以确保消息完整性的技术。主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前 广泛使用的算法有MD4、MD5、SHA-1.
消息摘要有两个基本属性:
两个不同的报文难以生成相同的摘要难以对指定的摘要生成一个报文,而可以由该报文反推算出该指定的摘要代表:美国国家标准技术研究所的SHA1和麻省理工学院Ronald Rivest提出的MD5
(二)对字符串进行加密
/**利用MD5进行加密
* @param str 待加密的字符串
* @return 加密后的字符串
* @throws NoSuchAlgorithmException 没有这种产生消息摘要的算法
* @throws UnsupportedEncodingException
*/
public String EncoderByMd5(String str) throws NoSuchAlgorithmException,
//确定计算方法
MessageDigest md5=MessageDigest.getInstance("MD5");
BASE64Encoder base64en = new BASE64Encoder();
//加密后的字符串
String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));
return newstr;
}调用函数:String str="0123456789"
System.out.println(EncoderByMd5(str));
输出:eB5eJF1ptWaXm4bijSPyxw==
(三)验证密码是否正确
因为MD5是基于消息摘要原理的,消息摘要的基本特征就是很难根据摘要推算出消息报文,因此要验证密码是否正确,就必须对输入密码(消息报文)重新计算其
摘要,和数据库中存储的摘要进行对比(即数据库中存储的其实为用户密码的摘要),若两个摘要相同,则说明密码正确,不同,则说明密码错误。
/**判断用户密码是否正确
* @param newpasswd 用户输入的密码
* @param oldpasswd 数据库中存储的密码--用户密码的摘要
* @return
* @throws NoSuchAlgorithmException
* @throws UnsupportedEncodingException
*/
public boolean checkpassword(String newpasswd,String oldpasswd) throws NoSuchAlgorithmException,
if(EncoderByMd5(newpasswd).equals(oldpasswd))
return true;
else
return false;
}posted @ 2007-05-09 11:13 Shawn Zhang 阅读(327) 评论(0) 编辑
posted @ 2007-05-09 11:11 Shawn Zhang 阅读(61) 评论(0) 编辑
微软也试图通过这个产品与诸多的J2EE开发工具,特别是Tiger(J2SE 5.0)相抗衡。而J2EE阵营的主要开发工具厂商巨头IBM,也推出了最新版本Eclipse 3.1 RC4.Eclipse从3.1 M4开始支持J2SE 5.0的开发,IBM认为J2SE 5.0的发布是Java语言发展史上一个重要里程碑,是迄今为止在Java编程方面所取得的最大进步。
Borland公司也推出了Together 2006和Delphi 2006等产品。随着这些开发平台的相继推出,那么在未来,开发平台将展开新一轮的激烈竞争,各个公司力图在整个开发平台市场上重新洗牌。
关于J2EE和.NET之间的讨论已经持续很多年了,未来这个争论必将继续下去,孰优孰劣仍然很难下结论。事实上,笔者认为无论怎样比较,。.NET和J2EE都各有特长,两者都是十分优秀的开发平台,短时间内谁也不可替代对手。之所以说选择哪种开发平台,除了要看软件开发人员对语言的掌握能力 及个人喜好,也要根据开发内容和企业具体情况、具体需求而定。
J2EE平台:更开放
开放性是J2EE的一个重要特点,这也是Java发展的生命源泉。Sun公司在其发展中起着关键性作用,同时很多世界级公司如IBM、BEA、甲骨文等,都是其忠实盟友。这些都决定了开发工具是少不了的。
由于Java的开放性特点,很多厂商都会创建自己的开发工具。右表中提到的是几家主要公司的Java开发工具。此外还有甲骨文公司的 Jdeveloper、赛门铁克公司的 Visual Cafe for Java、Adobe公司的JRUN以及Apache公司的ANT等也是常见的开发工具。
.NET平台:易上手
至于由微软开发的.NET平台下的开发工具,主要是基于Visual Studio系列的商业开发工具……NET最大特点就是容易上手,是软件开发人员入门的较好选择。优异的用户界面反应速度以及与Windows的整合度, 可以使软件人员较快地构建出用户界面比较好的应用程序。
其实作为一个开发平台,.NET和Java都非常成熟和稳定。但.NET比Java的诞生晚了六年,这也恰恰在某种程度上增加了.NET的优越性。因为新技术总可以借鉴旧技术的发展经验,达到取长补短的效果。
Visual Studio .NET是特性丰富的开发环境,通用语言的支持能力使开发人员能够在C++、VB和C#间自由转换。而且,Visual J#.NET还使Java开发人员可以使用所选的语言对。NET平台进行编程。编程人员利用Visual J#.NET创建基于。NET的应用程序,这些应用程序可以无缝地与使用任何其他。NET平台支持语言编写的。NET应用程序进行交互操作。
有了Visual J#.NET,Java开发人员就可利用。NET框架的丰富工具(ADO.NET、ASP.NET和许多其他工具),这些工具的功能和简单性超过了Java开发工具包(JDK)规范中的功能。
Visual Studio.NET的编辑器还支持XML文档、XML大纲、HTML和CSS的创建。比如,XML是在Java诞生之后,。NET诞生之前出现的技术, 所以。NET对于XML的整合会比较完善,而Java是后来将之加入的,整合程度自然比不上。NET.下面对微软最新发布的Visual Studio 2005的特点作一个简单介绍:微软把 Microsoft SQL Server 2005、Visual Studio 2005,以及将于明年推出的BizTalk Server 2006共同构成新一代企业级应用平台,其核心是Visual Studio 2005.
利用Visual Studio 2005以及.NET Framework 2.0 这一企业级开发平台,广大开发人员及其团队能够开发出更加高效、安全和可靠的解决方案。Visual Studio 2005增加了一系列新的工具,其中,Visual Studio Team System是一个可扩展的、支持整个软件开发生命周期的工具平台,能使软件开发团队之间更好地协作,从而开发出现代化的、具有服务导向性的解决方案。
Microsoft Visual Studio 2005 开发工具系列,有许多令人期盼已久的强化功能,包括提供更高的程序开发效率、更精简的程序代码、更佳的安全性能等。
另外该工具系列还具备一些新特色,包括。NET Framework 2.0、ASP .NET 2.0、64-bit 程序开发支持、新的Windows Form程序设计以及对行动装置解决方案的全新开发支持。
值得注意的是,首度推出的 Visual Studio Team System 是与开发工具完全整合的软件开发生命周期管理平台,与Agile方法论以及CMMI规范都相整合。
Visual Studio Team System 除了在软件开发流程上更加严谨之外,软件开发的质量与时间也更易于掌控,同时,还将Visual Studio开发工具一贯支持个人开发者高生产力的优势,延伸到支持整个高效率及流程导向的开发团队。
.NET在技术上的进步也开始体现在市场占有率上。如果以前大家对两种平台的认识是。NET可能无法胜任大规模的企业开发,那么最近的一系列调查数据则能够反驳这一观点。
IDC公司在2005年10月份进行的一项调查发现,35.7%的大公司采用。NET来开发最重要的业务软件,而使用Java的比例只有25.3%。
未来:代码管理工具比平台更重要
但现在就说Java平台将会退出竞争市场还为时过早。毕竟Java平台已经发展了这么多年,不会因为。NET的胜利而消失。而且对于大型企业来说,由于现有规模和业务种类已经十分复杂,加之有多年遗留下来的应用系统,Java平台可能还是最适当的选择。
对于软件开发人员来说,单学习哪种语言都不会找不到工作。一旦选择一方作为开发工具,惟“精实”才是惟一的出路。在此基础上去不断尝试新东西,才是IT行业的生存之道。
对于企业来说,。NET和J2EE都有自己相对稳定的用户群。虽然这两个开发平台在很多方面都有很多相同或者相似的特性,但是不等于就可以互相替换,因为双方毕竟还有许多本身的独到之处,可称为是“独门绝技”。
首先这两个开发平台的开发思路截然不同。J2EE依托于开放的工业标准,注重开源代码,强调跨平台的应用。而。NET则注重开放工具功能的日趋强大和丰 富,可以兼收其他产品的优点。比如在微软的开发平台上可以兼容20多个开发语言,简单易学,界面友好,是微软产品的一贯特征。
然而微软的开发平台只能在Windows系统上运行,不支持开源代码。
一般认为,在中小企业中,微软的开发平台将继续成为主流的产品。而在大中企业中,特别是那些使用UNIX系统或者具有多个操作系统、业务环境和IT环境十分复杂、对业务要求十分苛刻的大型企业中,J2EE将继续占有较大的市场。
微软则试图将自己的开发平台向大中企业延伸,争夺J2EE原有的市场份额。J2EE则力图保住原有的市场和用户。争夺最激烈的是中型企业—它成为了两大阵营竞争的前沿阵地。这一争夺随着两大阵营的最新产品发布,将在2006年更趋白热化。
谁将在2006年的竞争中占有上风,获得更多用户的青睐?那些开发平台推出的新特点和新工具能否得到用户的认可?能否经住实践的考验?谁也无法给出确切的答案。
以Compuware公司为代表,在两大阵营夹缝中生存,推行“左右逢源”方针能否获得成功?能否走出一条融合之路,异军突起?也是我们在2006年关注的焦点之一。
现在,市面上出现了一些软件公司推出了同时支持Java和。NET两种平台的开发工具,在二者之间架起了桥梁,Compuware公司就是其中的代表。在 Compuware看来,选择Java平台还是。NET平台已经不重要了,重要的是谁有一套完善、高效的软件代码管理工具。因此,两种平台并存的局面还会 持续很长时间。
posted @ 2007-05-09 11:04 Shawn Zhang 阅读(113) 评论(0) 编辑
posted @ 2007-05-09 10:46 Shawn Zhang 阅读(34) 评论(0) 编辑