Keep your secrets with yours.

	private String mode = "AES/ECB/PKCS5Padding";
	private final String KEY_ALGORITHM = "AES";
	private SecretKey aesKey;
	private byte[] key;

At the line 12, is the point of specifying encryption modes. It is “AES/ECB/PKCS5Padding”. That means this program use AES (Advanced Encryption Standard) which is the winner of the contest, held in 1997 by the US Government after the (DES) Data Encryption Standard was found too weak. It also used Cipher mode ECB (Electronic Code Book) and used Padding mode “PKCS5Padding”

ที่บรรทัด 12 คือจุดที่กำหนดรูปแบบต่างๆสำหรับการเข้ารหัส ข้อความ”AES/ECB/PKCS5Padding” มีความหมายคือโปรแกรมจะใช้การเข้ารหัสแบบ AES ซึ่งเป็นผู้ชนะในการแข่งขันทดสอบการเข้ารหัสในปี 1997 โดยรัฐบาลสหรัฐหลังจากพบจุดอ่อนของการเข้ารหัสแบบ DES และโปรแกรมยังเลือกใช้โหมดเข้ารหัสแบบ ECB และโหมดการขยายหลักผลลัพทธ์ของรหัสแบบ “PKCS5Padding”

	public AESEnc() {

		key = generateAesKey();
		aesKey = new SecretKeySpec(key, KEY_ALGORITHM); //�õ�aesKey
	}

	/**
	 *
	 * ���췽��
	 *
	 * @param k
	 */
	public AESEnc(byte[] k) {

		aesKey = new SecretKeySpec(k, KEY_ALGORITHM);
	}

In the code above, it is 2 public methods which I highlighted that have the same name for supporting in case the caller use nothing to pass in as the parameter (line 22) or use 1 variable pass in (line 34). You can add more method of the same name with no limit methods. Just use the different amount of variable or equal amount of variable but different variable type. It depends on your purpose to use your method. In case of 1st method which has variable, because it has to build the key to use for Encrypt process. Meanwhile, the 2nd method use the old key that generated from 1st method of doing the Decrypt process.

ในโปรแกรมข้างบน มีบรรทัดที่ผมเน้นสีไว้ 2 บรรทัดซึ่งคือ public method จำนวน 2 method ที่มีชื่อเดียวกัน เพื่อรองรับการเรียกใช้งานแบบไม่มีการส่งตัวแปรผ่าน (บรรทัดที่ 22) และแบบที่ถูกเรียกใช้พร้อมส่งผ่านตัวแปรมา 1 ตัว (บรรทัดที่ 34) คุณสามารถเพิ่ม method ใหม่ๆที่ใช้ชื่อเดียวกันได้อีกไม่จำกัด โดยส่งตัวแปรที่มีจำนวนต่างกัน หรือตัวแปรที่มีจำนวนเท่ากัน แต่มีชนิดของตัวแปรต่างกัน ขึ้นอยู่กับจุดประสงค์ของการใช้งาน method ของคุณเอง การที่โปรแกรมในส่วนแรกต้องการตัวแปร เพราะมันเป็นการเข้ารหัส แต่ method ที่สองไม่ต้องมีตัวแปรเพราะไม่ต้องสร้างใหม่ แต่นำรหัสควบคุมเดิมที่ได้จาก method แรกมาใช้เพื่อการถอดรหัส

	public AESEnc() {

		key = generateAesKey();
		aesKey = new SecretKeySpec(key, KEY_ALGORITHM); //�õ�aesKey
	}

Furthermore, there is only one point of different between 1st method and 2nd method which is the line 24 of the former method which no variable pass in through the method. Hence, I will explain the line 24 that call the method related to the below source code.

นอกจากนี้ มีเพียงจุดเดียวที่แตกต่างกันระหว่าง method แรกกับ method ที่ 2 คือบรรทัดที่ 24 ซึ่งอยู่ใน method แรก ซึ่งไม่มีการส่งตัวแปรผ่านไปให้กับ method ดังนั้น ผมจะอธิบายส่วนของบรรทัดที่ 24 ซึ่งเรียกใช้ method ที่สัมพันธ์กับโปรแกรมในส่วนต่อไปที่แสดงอยู่ด้านล่างนี้

	private byte[] generateAesKey(){

		KeyGenerator kgen = null;
		try {
			kgen = KeyGenerator.getInstance(KEY_ALGORITHM);
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		kgen.init(256);
		SecretKey secretKey = kgen.generateKey();		

		return secretKey.getEncoded();
	}

The code above is the important part of encryption key generating that calls the function of the class library names “javax.crypto.KeyGenerator” at line 49 that I highlighted which must import from line 6 of the program (This line is not showing here). It requires a key algorithm parameter which refers here in this program to “AES”. The 2nd highlighted line 54 did declare the number of bit for AES encryption at 256 bits. The 3rd highlighted line 55 got the result of generating key to the variable “secretKey”. Finally, it returned “secretKey” in the form of the array of the sequence of bytes to the method that call this method.

โปรแกรมที่แสดงอยู่ด้านบน คือส่วนสำคัญของการสร้างค่ารหัสควบคุมการเข้ารหัสของข้อมูลซึ่งจะเรียกใช้ฟังก์ชั่นใน class library ที่ชื่อ “javax.crypto.KeyGenerator” ณ.บรรทัดที่ 49 ที่ผมเน้นสีไว้ และได้ทำการ import ไว้ในโปรแกรมตั้งแต่บรรทัดที่ 6 (ดูจากโปรแกรม ไม่ได้แสดงไว้ ณ.ที่นี้) ฟังก์ชั่นนี้ต้องการตัวแปร 1 ตัวเพื่อกำหนดการสร้างรหัสควบคุมซึ่งก็คือ “AES” (เป็นค่าคงที่ที่กำหนดไว้ที่บรรทัดที่ 13) บรรทัดที่เน้นสีไว้เป็นลำดับที่ 2 ทำการกำหนดว่ารูปแบบการเข้ารหัสใช้ระดับข้อมูลจำนวน 256 บิต ที่เน้นสีเป็นลำดับที่ 3 คือผลลัพธ์ที่ได้จากการสร้างรหัสควบคุมและเก็บไว้ในตัวแปรชื่อ “secretKey” และท้ายสุด method นี้ จะคืนค่าตัวแปรคือ “secretKey” ที่เป็นผลลัพธ์กลับไปให้กับ method ที่เรียกใช้งาน method นี้ในรูปแบบของอาเรย์ของลำดับต่อเนื่องของข้อมูลประเภท byte

2 comments

Leave a Reply

Your email address will not be published. Required fields are marked *