----
程式寫作測驗:
請寫一個檔案加密的程式,輸入檔名,讀取內容,加密後輸出成另一加密檔。請交原始碼、編譯環境相關檔案,可參考或使用現成的加密函式RSA, AES, DES…或者基本的XOR。
評分標準:
基本項目
1. coding style (Source Code)
2. 完成度(exe檔 或 JAR檔)
加分項目
1. 可以的話用不同語言(C++, Java)撰寫
2. 不同作業系統程式 (project or make file)
3. 視窗介面(console, Windows 或 手機)
----
加密的東西其實還蠻常用到的,像是 PHP 的使用者密碼都是會經過加密在儲存到資料庫,只是用 Java 到還是頭一遭!稍微做了點功課,發現大家比較推薦的加密演算法是 AES,而且在 Java 的官網就可以找到教學文章 ,所以就寫了一個簡單的 AES 加密、解密器。
核心程式碼如下:
AESEncrypter.java
package joujiahe.encrypt.AES; import java.security.NoSuchAlgorithmException; import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; // AES Encrypt core public class AESEncrypter { private SecretKeySpec skeySpec; private Cipher cipher; public AESEncrypter() throws NoSuchAlgorithmException, NoSuchPaddingException{ // Get the KeyGenerator KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128); // 192 and 256 bits may not be available // Generate the secret key specs. SecretKey skey = kgen.generateKey(); byte[] raw = skey.getEncoded(); this.skeySpec = new SecretKeySpec(raw, "AES"); // Instantiate the cipher this.cipher = Cipher.getInstance("AES"); } // output encrypted bytes public byte[] encrypt( byte[] original ) throws Exception{ this.getCipher().init(Cipher.ENCRYPT_MODE, skeySpec); byte[] encrypted = cipher.doFinal(original); return encrypted; } // output decrypted bytes public byte[] decrypt( byte[] original ) throws Exception{ this.getCipher().init(Cipher.DECRYPT_MODE, skeySpec); byte[] decrypted = cipher.doFinal(original); return decrypted; } // getter and setter public SecretKeySpec getSkeySpec() { return skeySpec; } public void setSkeySpec(SecretKeySpec skeySpec) { this.skeySpec = skeySpec; } public Cipher getCipher() { return cipher; } public void setCipher(Cipher cipher) { this.cipher = cipher; } }
參考資料:Using AES with Java Technology
沒有留言:
張貼留言