Browsing all articles tagged with Java
十一
24
16

PHP是用来做网站的 Java从不做网站

Author Jessica     Category 本站原创     Tags ,
这几年,B/S结构被炒的很火热,所以随之而出的问题就来了,既然B/S这么火,那么我们应该选择什么语言来从事B/S结构系统的开发呢?
 
由于这个问题的存在,并且在当前状况下会一直存在,这就导致了N的口水战。对于这些,我想大家都早已看腻了,在我看来,真正的牛人不会去花时间去讨论这个。
 
前几天看了七月十五在javaeye上发表了一篇 《论PHP的倒掉》的文章,由于我是一名PHPer,看到之后我跟朋友戏说,回头我起草一篇《论PHP的崛起》。
 
当然,这只是我的一个玩笑。但是我犹豫之后,还是决定写下自己的一点拙见。
 
我要表明的观点很简单,任何一种语言不应该和另外一种语言相比,如果非要拿PHP和Java相比,那么结论非常简单,PHP是用来做网站的,而Java不是。
 
我们需要引入一个观点,B/S != 网站
 
B/S结构是一种架构。由于C/S这种结构对系统依赖非常大,并且有个非常严重缺陷就是如果我要在Server端修改了代码,那么对应的Client的也必须做相应的改变。一个典型的例子就是网络游戏。这样的代价是惨重的,因为对于我们一般的系统来说,每次更新都要为客户去部署或者调试,是非常麻烦的事情。
 
后来,浏览器功能越来越强悍,以至于发展到现在,足可以满足一般系统的要求。人都不是傻子,有更好的东西为什么不用呢?所以发展成为B/S繁荣的今天。
 
那么好,我问大家一个问题,浏览器是用来干什么的?你肯定不假思索的会回答:浏览网站啊。对!没错。那么我们推理一下,B/S结构的程序是浏览器触发执行的,那么B/S结构的系统也理所当然称之为“网站”了,不是嘛?

read more

27
2

C#加密.Java解密(DES 返回非base64 可以url传递)

Author Jessica     Category Java     Tags , ,

工作需要 需要C#给一个字符串加密 然后通过url传递给Java Java进行解密.

网上这种例子好多 但是C#返回的都是base64..但是base64编码在URL中传递又不太合适.

所以我自己把算法修改了一下 已经测试可以使用..:)

为了和C#统一 所以我在Java中的向量直接用的是key 你也可以换一下 两者统一即可.

最后又打包下载.

C#代码

  1. using System;  
  2. using System.Security;  
  3. using System.Security.Cryptography;  
  4. using System.IO;  
  5. using System.Text;  
  6. using System.Threading;  
  7. namespace DES  
  8. {  
  9.     /// <summary>  
  10.     /// DES 加密  
  11.     /// </summary>  
  12.     public class DES  
  13.     {  
  14.         public DES()  
  15.         {  
  16.         }  
  17.         //密钥  
  18.         private const string sKey = "ABCDEFGH";  
  19.  
  20.         public static string Encrypt(string pToEncrypt)  
  21.         {  
  22.             using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())  
  23.             {  
  24.                 byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt);  
  25.                 des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);  
  26.                 des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);  
  27.                 System.IO.MemoryStream ms = new System.IO.MemoryStream();  
  28.                 using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))  
  29.                 {  
  30.                     cs.Write(inputByteArray, 0, inputByteArray.Length);  
  31.                     cs.FlushFinalBlock();  
  32.                     cs.Close();  
  33.                 }  
  34.                 string str = HexStringFromByteArray(ms.ToArray());  
  35.                 ms.Close();  
  36.                 return str;  
  37.             }  
  38.         }  
  39.         public static string HexStringFromByteArray(byte[] bytes)  
  40.         {  
  41.             string s = "";  
  42.  
  43.             foreach (byte b in bytes)  
  44.             {  
  45.                 s += string.Format("{0:X2}", b);  
  46.             }  
  47.  
  48.             return s;  
  49.         }  
  50.  
  51.         public static void Main(string[] args)  
  52.         {  
  53.             //  
  54.             // TODO: Add code to start application here  
  55.             //  
  56.  
  57.             Console.WriteLine (DES.Encrypt("500200088"));  
  58.         }  
  59.  
  60.     }  

Java代码

  1. import javax.crypto.Cipher;  
  2. import javax.crypto.SecretKey;  
  3. import javax.crypto.SecretKeyFactory;  
  4. import javax.crypto.spec.DESKeySpec;  
  5. import javax.crypto.spec.IvParameterSpec;  
  6.  
  7. public class DES {  
  8.     /** 加密、解密key. */    
  9.     private static final String PASSWORD_CRYPT_KEY = "ABCDEFGH";     
  10.     
  11.     /** 加密算法 */    
  12.     private final static String ALGORITHM = "DES/CBC/PKCS5Padding";     
  13.          
  14.     /**     
  15.      * 对数据进行DES加密.    
  16.      * @param data 待进行DES加密的数据    
  17.      * @return 返回经过DES加密后的数据    
  18.      * @throws Exception    
  19.      */    
  20.     public final static String decrypt(String data) throws Exception {     
  21.         return new String(decrypt(hex2byte(data.getBytes()),     
  22.                 PASSWORD_CRYPT_KEY.getBytes()));     
  23.     }     
  24.     
  25.     /**     
  26.      * 对用DES加密过的数据进行解密.    
  27.      * @param data DES加密数据    
  28.      * @return 返回解密后的数据    
  29.      * @throws Exception    
  30.      */    
  31.     public final static String encrypt(String data) throws Exception  {     
  32.         return byte2hex(encrypt(data.getBytes(), PASSWORD_CRYPT_KEY     
  33.                 .getBytes()));     
  34.     }     
  35.          
  36.     /**     
  37.      * 用指定的key对数据进行DES加密.    
  38.      * @param data 待加密的数据    
  39.      * @param key DES加密的key    
  40.      * @return 返回DES加密后的数据    
  41.      * @throws Exception    
  42.      */    
  43.     private static byte[] encrypt(byte[] data, byte[] key) throws Exception {      
  44.         // 从原始密匙数据创建DESKeySpec对象     
  45.         DESKeySpec dks = new DESKeySpec(key);     
  46.         // 创建一个密匙工厂,然后用它把DESKeySpec转换成     
  47.         // 一个SecretKey对象     
  48.         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");     
  49.         SecretKey securekey = keyFactory.generateSecret(dks);  
  50.         //向量  
  51.         IvParameterSpec iv = new IvParameterSpec(key);  
  52.         // Cipher对象实际完成加密操作     
  53.         Cipher cipher = Cipher.getInstance(ALGORITHM);     
  54.         // 用密匙初始化Cipher对象     
  55.         cipher.init(Cipher.ENCRYPT_MODE, securekey, iv);     
  56.         // 现在,获取数据并加密     
  57.         // 正式执行加密操作     
  58.         return cipher.doFinal(data);     
  59.     }  
  60.     
  61.     /** *//**    
  62.      * 用指定的key对数据进行DES解密.    
  63.      * @param data 待解密的数据    
  64.      * @param key DES解密的key    
  65.     * @return 返回DES解密后的数据    
  66.      * @throws Exception    
  67.      */    
  68.     private static byte[] decrypt(byte[] data, byte[] key) throws Exception {     
  69.         // 从原始密匙数据创建一个DESKeySpec对象     
  70.         DESKeySpec dks = new DESKeySpec(key);     
  71.         // 创建一个密匙工厂,然后用它把DESKeySpec对象转换成     
  72.         // 一个SecretKey对象     
  73.         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");     
  74.         SecretKey securekey = keyFactory.generateSecret(dks);  
  75.         //向量  
  76.         IvParameterSpec iv = new IvParameterSpec(key);  
  77.         // Cipher对象实际完成解密操作     
  78.         Cipher cipher = Cipher.getInstance(ALGORITHM);     
  79.         // 用密匙初始化Cipher对象     
  80.         cipher.init(Cipher.DECRYPT_MODE, securekey, iv);     
  81.         // 现在,获取数据并解密     
  82.         // 正式执行解密操作     
  83.         return cipher.doFinal(data);     
  84.     }  
  85.       
  86.     public static byte[] hex2byte(byte[] b) {     
  87.         if ((b.length % 2) != 0)     
  88.             throw new IllegalArgumentException("长度不是偶数");     
  89.         byte[] b2 = new byte[b.length / 2];     
  90.         for (int n = 0; n < b.length; n += 2) {     
  91.             String item = new String(b, n, 2);     
  92.             b2[n / 2] = (byte) Integer.parseInt(item, 16);     
  93.         }     
  94.         return b2;     
  95.     }     
  96.     
  97.     public static String byte2hex(byte[] b) {     
  98.         String hs = "";     
  99.         String stmp = "";     
  100.     
  101.         for (int n = 0; n < b.length; n++) {     
  102.             stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));     
  103.             if (stmp.length() == 1)     
  104.                 hs = hs + "0" + stmp;     
  105.             else    
  106.                 hs = hs + stmp;     
  107.         }     
  108.         return hs.toUpperCase();     
  109.     }  
  110. }  

 

read more

12
1

Java中double类型计算不精确的解决办法(BigDecimal)

Author Jessica     Category Java     Tags ,

首先我们先用一般的情况进行下double类型的计算。

  1. System.out.println(1.0-0.41); 

得到的值是0.5900000000000001,这个是不精确的。
为了解决这个问题,Java为我们提供了一个叫BigDecimal的类。
所以我们用下面的方法计算。

  1. BigDecimal bd1 = new BigDecimal(1.0);  
  2. BigDecimal bd2 = new BigDecimal(0.41);  
  3. System.out.println(  
  4.   bd1.subtract(bd2).doubleValue()); 

我们又看到,这个值和上面得到的是一样的。也是不精确的,也许这就是Java的一个BUG吧。
但是我们换一种另外的方法解决。注意看注释。

read more

分类目录

最近文章

近期评论

文章归档

标签

.net AJAX button Comet CSS Discuz! DIV+CSS Flash Form Google HTML编辑器 IE8 Java JavaScript jQuery JSP md5 MySQLReback OAuth Oracle PHP php-fpm PNG Punny SkiyoTabs tab TagCloud Vista Web2.0 Windows7 上传 加密 图标 本站原创 模板 模板引擎 源码 登录 短网址 石家庄 算法 编译 面向对象 魔术方法

链接表