2017-2018-2 20165221 實驗三《敏捷開發與XP實踐》實驗報告

實驗報告封面

  • 姓名:譚笑
  • 學號:20165221
  • 班級:1652班
  • 實驗名稱: JAVA——敏捷開發與XP實踐
  • 指導老師:婁嘉鵬
  • 試驗時間:15:35--17:15
  • 實驗性質:選修
  • 實驗組次:21
  • 實驗序號:3java

    實驗過程:

    1.XP基礎git

  • 極限編程(ExtremeProgramming,XP)是一種全新而快捷的軟件開發方法。XP團隊使用現場客戶、特殊計劃方法和持續測試來提供快速的反饋和全面的交流:算法

  • XP是以開發符合客戶須要的軟件爲目標而產生的一種方法論
  • XP是一種以實踐爲基礎的軟件工程過程和思想
  • XP認爲代碼質量的重要程度超出人們通常所認爲的程度
  • XP特別適合於小型的有責任心的、自覺自勵的團隊開發需求不肯定或者迅速變化的軟件
  • XP軟件開發的基石是XP的活動,包括:編碼、測試、傾聽、設計。編程

2.XP核心實踐安全

3.相關工具網絡

2、在IDEA中使用工具格式化代碼

實驗內容:框架

安裝alibaba插件,解決代碼中的規範問題。在IDEA中使用工具把下面代碼從新格式化,再研究一下Code菜單,找出一項讓本身感受最好用的功能。提交截圖,加上本身學號水印。ide

  • Code菜單功能
Override Methods:重載方法/新建方法
Implement Methods:執行方法
Generate:建立類裏面任何字段的getter與setter方法
Surround with:將某條語句被if、for等等封裝語句括起
Down/up:將語句下移到後一模塊以後
Move line down:調換語句順序
Comment with Line/BlockComment```:兩種註釋
Reformat Code:將代碼按標準格式縮進

編程標準使代碼更容易閱讀和理解。編程標準包含:具備說明性的名字、清晰的表達式、直截了當的控制流、可讀的代碼和註釋,以及在追求這些內容時一致地使用某些規則和慣用法的重要性。工具

Settings ->Plugins -> Browse repositories...安裝alibaba
在項目名稱上單擊右鍵,在彈出菜單上選擇編碼規約掃描

下載搭檔代碼並添加測試用例

  • 重構後代碼
class studentdark {
    private int num;
    private String name;
    private int java;

    public int getNum() {
        return num;
    }
    @Override
    public String toString() {
        return "studentdark{" +
                "num=" + num +
                ", name='" + name + '\'' +
                ", java=" + java +
                '}';
    }
    public void setNum(int num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getJava() {
        return java;
    }

    public void setJava(int java) {
        this.java = java;
    }
}
public class studentdarkTest {

    public static void main(String[] args) {
        studentdark student = new studentdark();
        student.setName("caoge");
        student.setNum(5312);
        student.setJava(94);
        System.out.println("學號爲"+ student.getNum() +",姓名爲"+ student.getName() +"java成績爲"+ student.getJava());
    }



}

結對編程--JAVA密碼學算法

密碼學包括密碼編碼學(Cryptography) 和密碼分析學(Cryptanalyst) 兩個分支。學習

密碼編碼學: 主要研究如何對信息進行編碼, 如何實現對信息的隱蔽, 是密碼學理論的基礎, 也是保密系統設計的基礎。
密碼分析學: 主要研究加密消息的破譯或消息的僞造, 是檢驗密碼體制安全性最爲直接的手段, 只有經過實際密碼分析考驗的密碼體制,纔是真正可用的。
Java安全體系結構總共分爲4個部分:

- JCA( Java Cryptography Architecture, Java加密體系結構):JCA提供基本的加密框架, 如證書、 數字簽名、消息摘要和密鑰對產生器。
- JCE( Java Cryptography Extension, Java加密擴展包):JCE在JCA的基礎上做了擴展, 提供了各類加密算法、 消息摘要算法和密鑰管理等功能。JCE的實現主要在javax.crypto包( 及其子包) 中
- JSSE( Java Secure Sockets Extension, Java安全套接字擴展包):JSSE提供了基於SSL( Secure Sockets Layer,安全套接字層) 的加密功能。 在網絡的傳輸過程當中, 信息會通過多個主機(頗有可能其中一臺就被竊聽) , 最終傳送給接收者, 這是不安全的。這種確保網絡通訊安全的服務就是由JSSE來提供的。
- JAAS( Java Authentication and Authentication Service, Java鑑別與安全服務):JAAS提供了在Java平臺上進行用戶身份鑑別的功能。
咱們小組結合正在學習《密碼學》中的DES算法,以及認真閱讀婁老師博客
- Java密碼學算法,瞭解到「DES」是目前最經常使用的對稱加密算法,但安全性較差。針對DES安全性的改進產生了能知足當前安全須要的TripleDES算法,即「DESede」。決定實現TripleDES算法,在老師範例代碼上作了調整。

編程思路:

(1) 獲取密鑰生成器KeyGenerator kg=KeyGenerator.getInstance("DESede");
Java中KeyGenerator類中提供了建立對稱密鑰的方法。KeyGenerator類預約義了一個靜態方法getInstance( ),方法getInstance( )的參數爲字符串類型,指定加密算法的名稱。

(2) 初始化密鑰生成器kg.init(168);該步驟通常指定密鑰的長度。咱們寫的是「DESede」,則能夠是112或168位,其中112位有效。

(3) 生成密鑰SecretKey k=kg.generateKey( );密鑰可用於之後的加密和解密。

Java密碼學算法

密碼學包含密碼編碼學密碼分析學兩個分支

  • 密碼編碼學:主要研究如何對信息進行編碼,如何實現對信息的隱蔽,是密碼學理論的基礎,也是保密系統設計的基礎。
  • 密碼分析學:主要研究加密消息的破譯或消息的僞造,是檢驗密碼體制安全性最爲直接的手段,只有經過實際密碼分析考驗的密碼體制,纔是真正可用的。
體驗加解密-凱撒密碼
Java對稱加密-DES算法
Java非對稱加密-RSA算法
使用密鑰協定建立共享密鑰
Java摘要算法- MD5
Java混合密碼系統
實驗任務:以結對的方式完成Java密碼學相關內容的學習,結合重構,git,代碼標準。
實驗代碼:
凱撒密碼
public class Caesar{
    public static void main(String []args) throws Exception{
        String s=args[0];
        int key=Integer.parseInt(args[1]);
        String es="";
        for(int i=0;i<s.length( );i++)
        {  char c=s.charAt(i);
            // 是小寫字母
            c = getC(key, c);
            es+=c;
        }
        System.out.println(es);
    }

    private static char getC(int key, char c) {
        if(c>='a' && c<='z') {
            //移動key%26位
            c = move(key, c);
            if(c<'a') {
                //向左超界
                c = changeCplus(c);
            }
            if(c>'z') {
                //向右超界
                c = changeCminus(c);
            }
        }
        // 是大寫字母
        else if(c>='A' && c<='Z') {
            c = move(key, c);
            if(c<'A') {
                c = changeCplus(c);
            }
            if(c>'Z') {
                c = changeCminus(c);
            }
        }
        return c;
    }

    private static char changeCminus(char c) {
        c -= 26;
        return c;
    }

    private static char changeCplus(char c) {
        c += 26;
        return c;
    }

    private static char move(int key, char c) {
        c+=key%26;
        return c;
    }
}

  • Java摘要算法- MD5
public class DigestPass{
    public static void main(String[ ] args) throws Exception{
        String x = getString(args[0]);
        MessageDigest m=MessageDigest.getInstance("MD5");
        m.update(x.getBytes("UTF8"));
        byte[] s = getDigest(m);
        String result="";
        for (int i=0; i<s.length; i++){
            result+= getString(s[i]).substring(6);
        }
        System.out.println(result);
    }

    private static String getString(byte b) {
        return Integer.toHexString((0x000000ff & b) |
                0xffffff00);
    }

    private static byte[] getDigest(MessageDigest m) {
        return m.digest();
    }

    private static String getString(String arg) {
        return arg;
    }
}
相關文章
相關標籤/搜索