2014年6月19日 星期四
2014年2月21日 星期五
Java加解密Class使用 - 對稱加密
稍微記錄一下Java中加密類別的使用方法,要使用加解密會用到下列三個Class:KeyGenerator、SecretKey、Cipher。 KeyGenerator主要是負責產生加解密用的Key
例如
例如
KeyGenerator keygen = KeyGenerator.getInstance("DES");//參數代表使用的加解密演算法
SecretKey key = keygen.generateKey(); //產生key
在產生完Key後,利用Cipher來對資料加密。String str ="example";
byte[] src = str.getBytes();
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key);//決定是何種模式有 ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE, UNWRAP_MODE
byte [] result = cipher.doFinal(src);//依據設定的Mode來開始動作,result即為加密後之密文
如果要解密的話,則改用DECRYPT_MODE
cipher.init(Cipher.ENCRYPT_MODE, key); byte [] src = cipher.doFinal(result);//取回明文,在轉換回對應之type即可 String str = new String(src);因為對稱加密,加解密都是用同一把Key所以會需要保存Key,最簡單的方法就是使用檔案來存放,例如
//存成檔案 byte [] bytekey = key.getEncoded(); int len = bytekey.length; FileOutputStream fos; fos = new FileOutputStream(FILEPATH) fos.write(bytekey); fos.close(); //讀檔 byte [] buf = new byte[len] FileInputStream fis = new FileInputStream(FILEPATH); int i = fis.read(buf); fis.close(); SecretKey resultKey = new SecretKeySpec(buf, "DES");//從byte array轉回key當然也可用ObjectInputStream、ObjectOutputStream拉,如此一來就可以少去byte轉換的動作。
2013年6月12日 星期三
Java sleep(), yield()/join(), notify()/notifyAll()/wait() 用法差異
http://dylanxu.iteye.com/blog/1322066
太久沒有用到,最近要用到的時候又忘了...
乾脆把他整理一下。
1.sleep, yield, join 基本上都是Thread scheduling的method,sleep跟yield用法差不多,基本上就是Thread不需要執行的時候呼叫,只是差在sleep可以決定時間。
join則是等待某個Thread執行完,例如
thread.join() //等thread跑完 在繼續
2.notify()/notifyAll()/wait() 則是Data Lock的部分,這些method都要在synchronized block中呼叫,不然會丟exception。
如果wait()的Thread要離開可以呼叫Thread的interrupt(); 會丟InterruptedException,可以跳離wait()狀態。
太久沒有用到,最近要用到的時候又忘了...
乾脆把他整理一下。
1.sleep, yield, join 基本上都是Thread scheduling的method,sleep跟yield用法差不多,基本上就是Thread不需要執行的時候呼叫,只是差在sleep可以決定時間。
join則是等待某個Thread執行完,例如
thread.join() //等thread跑完 在繼續
2.notify()/notifyAll()/wait() 則是Data Lock的部分,這些method都要在synchronized block中呼叫,不然會丟exception。
如果wait()的Thread要離開可以呼叫Thread的interrupt(); 會丟InterruptedException,可以跳離wait()狀態。
try { while(true) { synchronized (this) { wait(); } } } catch (InterruptedException e) { //interrupt triger }
訂閱:
文章 (Atom)
[京都] 瑠璃光院 永觀堂 東寺
京都的紅葉大部分都是以寺廟為中心,來記錄一下這次跑的寺廟,第一間是 瑠璃光院,這沒甚麼好說的,就是熱門景點,由於剛好是不用預約的日期,所以最好要提早去排隊,交通也不是很方便會有巴士爆滿的情況,而且門票也不便宜,不過拍出來的照片層次豐富,要不要去被騙一次就看人抉擇了。 ...