這是為了ECT作業所作的筆記 Bouncy Castle Cryptography

這次作業用到了密碼學的技術,助教給了這個網站的library讓大家方便實作

作業內容是:可讀取文字, 圖片, 聲音
先初始化轉成byte後,利用SHA512進行訊息摘要,
再對檔案做RSA加密, 解密,接著是 AES 加密, 解密,
最後使用解密後的內容作還原的動作,
若input的檔案與output的檔案內容一樣表示成功。

以下是這次作業會用到的class

* SHA512Digest 產生訊息摘要MD  
* AESEngine (對稱式加密)  
* RSAEngine (非對稱式加密)  
* RSAKeyParameters ,用來產生RSA的公鑰、私鑰  
* KeyParameter  
* BigInteger  

p.s. 以下是在寫作業時遇到的問題解決網址
其實用到了什麼class也是google後從學長的部落格看來的XD

SHA512: SHA512 ouput 問題
發現除了 SHA 的 out 外
其他的加解密產生 output 值要印出時都可以用到:
用: String.format("%0128x", new BigInteger(1, byteData));
來取代 Hex.encode(byteData);

RSA:
JavaWorld - 在RSA 解密時的問題
使用Java進行RSA加解密
RSA using BouncyCastle (有問題 不過解決了 –> JavaClassCastException)

AES:
用Bouncy Castle实现AES-128-CBC加密解密 (殘體字不喜勿入)
How to encrypt / decrypt with AES from Bouncy Castle API in J2ME applications

最後的檔案輸出:
良葛格的學習筆記  (最後寫輸出時才想到有這個網站,因此也修改了輸入檔案時的做法,一氣呵成~~ )

若有一直google的話,會發現有許多做法
我認為以下做法最省事:(省略了很多作法,自行google)

Cipher out = Cipher.getInstance("演算法的名字 (ex. AES)", "BC");
out.init(Cipher.DECRYPT_MODE (或是ENCRYPT_MODE), key, new IvParameterSpec(AESiv));
outputByteArray = out.doFinal( inputByteArray);   (通常因為長度很長所以會用迴圈去做分段讀取的動作)

2011/06/02  Updated:
單純加解密:
RSA - http://www.javamex.com/tutorials/cryptography/rsa_encryption.shtml
AES - http://java.sun.com/developer/technicalArticles/Security/AES/AES_v1.html
超級有用 - http://introcs.cs.princeton.edu/java/78crypto/RSA.java.html