ในส่วนก่อนหน้านี้ เราได้แนะนำการใช้คลาสการเข้ารหัสและถอดรหัสบางส่วนมารวมกันเพื่อทำการทดสอบง่ายๆ ดังนี้
กิจกรรมหลัก:
คัดลอกรหัสรหัสดังต่อไปนี้:
แพ็คเกจ com.home.testdes;
นำเข้า android.os.Bundle;
นำเข้า android.util.Log;
นำเข้า android.app.Activity;
MainActivity ระดับสาธารณะขยายกิจกรรม {
@แทนที่
ป้องกันเป็นโมฆะ onCreate (บันเดิลที่บันทึกไว้InstanceState) {
super.onCreate (savedInstanceState);
DESUtil u = DESUtil ใหม่();
สตริง mi = u.getEnc("ฉันรักคุณ");
Log.i("หลังการเข้ารหัส", mi);
สตริง ming = u.getDec(mi);
Log.i("หลังการถอดรหัส", ming);
-
-
เครื่องมือเข้ารหัสและถอดรหัส:
คัดลอกรหัสรหัสดังต่อไปนี้:
แพ็คเกจ com.home.testdes;
นำเข้า java.security.Key;
นำเข้า java.security.spec.AlgorithmParameterSpec;
นำเข้า javax.crypto.Cipher;
นำเข้า javax.crypto.SecretKeyFactory;
นำเข้า javax.crypto.spec.DESKeySpec;
นำเข้า javax.crypto.spec.IvParameterSpec;
นำเข้า android.util.Base64;
-
* ใช้เครื่องมือเข้ารหัสและถอดรหัส DES
-
* @ผู้เขียน ผู้ดูแลระบบ
-
-
DESUtil คลาสสาธารณะ {
คีย์ส่วนตัว คีย์;// ค่าคีย์ของคีย์
ไบต์ส่วนตัว [] DESkey;
ไบต์ส่วนตัว [] DESIV = { 0x12, 0x34, 0x56, 0x78, (ไบต์) 0x90, (ไบต์) 0xAB,
(ไบต์) 0xCD, (ไบต์) 0xEF };
AlgorithmParameterSpec ส่วนตัว iv = null;//อินเทอร์เฟซพารามิเตอร์ของอัลกอริทึมการเข้ารหัส
DESUtil สาธารณะ () {
พยายาม {
this.DESkey = "abcdefghijk".getBytes("UTF-8");//ตั้งค่าคีย์
DESKeySpec keySpec = ใหม่ DESKeySpec(DESkey);//ตั้งค่าพารามิเตอร์คีย์
iv = ใหม่ IvParameterSpec(DESIV); // ตั้งค่าเวกเตอร์
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");//รับคีย์แฟคทอรี
key = keyFactory.generateSecret(keySpec);//รับคีย์อ็อบเจ็กต์
} จับ (ข้อยกเว้นจ) {
e.printStackTrace();
-
-
-
* สตริงที่เข้ารหัส, การป้อนข้อความธรรมดา, เอาต์พุตข้อความการเข้ารหัส
-
* @param inputString
* ข้อความธรรมดาที่จะเข้ารหัส
* @return สตริงที่เข้ารหัส
-
สตริงสาธารณะ getEnc (สตริงอินพุตสตริง) {
ไบต์ [] byteMi = null;
ไบต์ [] byteMing = null;
สตริงเอาต์พุตString = "";
พยายาม {
byteMing = inputString.getBytes("UTF-8");
byteMi = this.getEncCode(byteMing);
ไบต์ [] temp = Base64.encode (byteMi, Base64.DEFAULT);
outputString = สตริงใหม่ (ชั่วคราว);
} จับ (ข้อยกเว้นจ) {
} ในที่สุด {
byteMing = โมฆะ;
byteMi = โมฆะ;
-
ส่งคืนเอาต์พุตสตริง;
-
-
* ถอดรหัสสตริงและป้อนข้อความธรรมดาเป็นไซเฟอร์เท็กซ์และเอาต์พุต
-
* @param inputString
* สตริงที่ต้องถอดรหัส
* @return สตริงที่ถอดรหัสแล้ว
-
สตริงสาธารณะ getDec (สตริงอินพุตสตริง) {
ไบต์ [] byteMing = null;
ไบต์ [] byteMi = null;
สตริง strMing = "";
พยายาม {
byteMi = Base64.decode(inputString.getBytes(), Base64.DEFAULT);
byteMing = this.getDesCode(byteMi);
strMing = สตริงใหม่ (byteMing, "UTF8");
} จับ (ข้อยกเว้นจ) {
} ในที่สุด {
byteMing = โมฆะ;
byteMi = โมฆะ;
-
กลับ strMing;
-
-
* การเข้ารหัสใช้การป้อนข้อความธรรมดาแบบไบต์ [] และเอาต์พุตข้อความการเข้ารหัสแบบไบต์ []
-
* @param bt
* Bytecode ที่จะเข้ารหัส
* @return รหัสไบต์ที่เข้ารหัส
-
ไบต์ส่วนตัว [] getEncCode (ไบต์ [] bt) {
ไบต์ [] byteFina = โมฆะ;
เลขรหัส;
พยายาม {
// รับอินสแตนซ์ Cipher
การเข้ารหัส = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init (Cipher.ENCRYPT_MODE, คีย์, iv);
byteFina = cipher.doFinal(bt);
} จับ (ข้อยกเว้นจ) {
e.printStackTrace();
} ในที่สุด {
รหัส = โมฆะ;
-
กลับ byteFina;
-
-
* การถอดรหัสใช้อินพุตข้อความเข้ารหัสไบต์ [] และเอาต์พุตข้อความธรรมดาไบต์ []
-
* @param bt
* Bytecode ที่จะถอดรหัส
* @return ถอดรหัสไบต์
-
ไบต์ส่วนตัว [] getDesCode (ไบต์ [] bt) {
เลขรหัส;
ไบต์ [] byteFina = โมฆะ;
พยายาม {
// รับอินสแตนซ์ Cipher
การเข้ารหัส = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init (Cipher.DECRYPT_MODE, คีย์, iv);
byteFina = cipher.doFinal(bt);
} จับ (ข้อยกเว้นจ) {
e.printStackTrace();
} ในที่สุด {
รหัส = โมฆะ;
-
กลับ byteFina;
-
-