NO3: string.intern()的作用是什么?My god,这是什么方法呀,脑子中一点儿概念都没有,连intern这个单词是什么意思都不知道.回到家马上打开JDK.原来是"返回字符串对象的规范化表示形式"。唉,看来是功力尚浅啊!
NO4:分别解释SHA,SSL,HTTP,TCP
SHA :
1. MD5加密,常用于加密用户名密码,当用户验证时。没有解密的方法。
1. protected byte[] encrypt(byte[] obj) {
2. try {
3. MessageDigest md5 = MessageDigest.getInstance("MD5");
4. md5.update(obj);
5. return md5.digest();
6. } catch (NoSuchAlgorithmException e) {
7. e.printStackTrace();
8. }
9. }
2. SHA加密,与MD5相似的用法,只是两者的算法不同。
1. protected byte[] encrypt(byte[] obj) {
2. try {
3. MessageDigest sha = MessageDigest.getInstance("SHA");
4. sha.update(obj);
5. return sha.digest();
6. } catch (NoSuchAlgorithmException e) {
7. e.printStackTrace();
8. }
9. }
3. RSA加密,RAS加密允许解密。常用于文本内容的加密。
1. import java.security.KeyPair;
2. import java.security.KeyPairGenerator;
3. import java.security.interfaces.RSAPrivateKey;
4. import java.security.interfaces.RSAPublicKey;
5.
6. import javax.crypto.Cipher;
7.
8. /**
9. * RSAEncrypt
10. *
11. * @author maqujun
12. * @see
13. */
14. public class RSAEncrypt {
15.
16. /**
17. * Main method for RSAEncrypt.
18. * @param args
19. */
20. public static void main(String[] args) {
21. try {
22. RSAEncrypt encrypt = new RSAEncrypt();
23.
24. String encryptText = "encryptText";
25. KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
26. keyPairGen.initialize(1024);
27. KeyPair keyPair = keyPairGen.generateKeyPair();
28. // Generate keys
29. RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
30. RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
31.
32. byte[] e = encrypt.encrypt(publicKey, encryptText.getBytes());
33. byte[] de = encrypt.decrypt(privateKey,e);
34. System.out.println(encrypt.bytesToString(e));
35. System.out.println(encrypt.bytesToString(de));
36. } catch (Exception e) {
37. e.printStackTrace();
38. }
39. }
40.
41. /**
42. * Change byte array to String.
43. * @return byte[]
44. */
45. protected String bytesToString(byte[] encrytpByte) {
46. String result = "";
47. for (Byte bytes : encrytpByte) {
48. result += (char) bytes.intValue();
49. }
50. return result;
51. }
52.
53. /**
54. * Encrypt String.
55. * @return byte[]
56. */
57. protected byte[] encrypt(RSAPublicKey publicKey, byte[] obj) {
58. if (publicKey != null) {
59. try {
60. Cipher cipher = Cipher.getInstance("RSA");
61. cipher.init(Cipher.ENCRYPT_MODE, publicKey);
62. return cipher.doFinal(obj);
63. } catch (Exception e) {
64. e.printStackTrace();
65. }
66. }
67. return null;
68. }
69.
70. /**
71. * Basic decrypt method
72. * @return byte[]
73. */
74. protected byte[] decrypt(RSAPrivateKey privateKey, byte[] obj) {
75. if (privateKey != null) {
76. try {
77. Cipher cipher = Cipher.getInstance("RSA");
78. cipher.init(Cipher.DECRYPT_MODE, privateKey);
79. return cipher.doFinal(obj);
80. } catch (Exception e) {
81. e.printStackTrace();
82. }
83. }
84.
85. return null;
86. }
87. }
SSL:SSL是Secure Socket Layer的缩写,即安全套接层协议。是由网景(Netscape)公司推出的一种安全通信协议,它能够对信用卡和个人信息提供较强的保护。 SSL是对计算机之间整个会话进行加密的协议。在SSL中,采用了公开密钥和私有密钥两种加密方法。SSL协议的优势在于它是应用层协议确立无关的。高层的应用协议如HTTP、FTP、Telnet等能透明地建立于 SSL协议之上。其在应用层协议通信之前就已经完成加密算法、通信密钥的协商以及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的安全性。
1.对用户和服务器的合法性进行认证,以确保数据将被发送到正确的客户机和服务器上;
2.加密数据以隐藏被传送的数据,以确保数据传输过程中的机密性和数据的完整性;
3.保护数据完整性。
HTTP: HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。这就是你为什么在浏览器中看到的网页地址都是以“http://”开头的原因。
TCP:TCP协议主为了在主机间实现高可靠性的包交换传输协议。
NO5: cookie的使用
正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得。
1.可在同一应用服务器内共享方法:设置cookie.setPath("/");
本机tomcat/webapp下面有两个应用:cas和webapp_b,
1)原来在cas下面设置的cookie,在webapp_b下面获取不到,path默认是产生cookie的应用的路径。
2)若在cas下面设置cookie的时候,增加一条cookie.setPath("/");或者cookie.setPath("/webapp_b/");就可以在webapp_b下面获取到cas设置的cookie了。
3)此处的参数,是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp),因此cookie.setPath ("/");之后,可以在webapp文件夹下的所有应用共享cookie,而cookie.setPath("/webapp_b/");是指cas应用设置的cookie只能在webapp_b应用下的获得,即便是产生这个cookie的cas应用也不可以。
4)设置cookie.setPath("/webapp_b/jsp")或者cookie.setPath("/webapp_b/jsp/")的时候,只有在webapp_b/jsp下面可以获得cookie,在webapp_b下面但是在jsp文件夹外的都不能获得cookie。
5)设置cookie.setPath("/webapp_b");,是指在webapp_b下面才可以使用cookie,这样就不可以在产生cookie的应用cas下面获取cookie了
6)有多条cookie.setPath("XXX");语句的时候,起作用的以最后一条为准。
6)设置多个path的方法???
2.跨域共享cookie的方法:设置cookie.setDomain(".jszx.com");
A机所在的域:home.langchao.com,A有应用cas
B机所在的域:jszx.com,B有应用webapp_b
1)在cas下面设置cookie的时候,增加cookie.setDomain(".jszx.com");,这样在webapp_b下面就可以取到cookie。
2)这个参数必须以“.”开始。
3)输入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:http://lc-bsp.jszx.com:8080/webapp_b,可以获取cas在客户端设置的cookie,而B机器访问本机的应用,输入:
http://localhost:8080/webapp_b则不可以获得cookie。
4)设置了cookie.setDomain(".jszx.com");,还可以在默认的home.langchao.com下面共享。
5)设置多个域的方法???
最近的工作经常用到cookie,看了一些资料,虽然原来依赖cookie比较多的方案已经改成现在这个了,但是当时看得一些东西还是最好记下来,免得过些天就一干二净了,怪可惜的。老梁说过这样的文字最好不要是纯文本的,说得是。本来就已经很抽象了,最好弄点图表,就算用123列出来也好