2015520吳思其 基於《Arm試驗箱的國密算法應用》課程設計我的報告

20155200吳思其 基於《Arm試驗箱的國密算法應用》課程設計我的報告

課程設計中承擔的任務

完成試驗箱測試功能4,5,6以及SM3加密實驗的實現算法

測試四 GPIO0按鍵中斷實驗

實驗目的

  • 學習GPIO中斷原理
  • 掌握Z32安全模塊中斷的工做原理安全

    實驗過程及結果:

    一、打開「Z32開發指南\實驗4-GPIO0按鍵中斷」目錄的工程文件。編譯工程,產生後綴名爲.bin的可執行代碼。
    二、下載程序
    將實驗箱接入電源,用USB公對公線將實驗箱的USB接口鏈接到電腦的USB接口上,在電腦上找到「Z32開發指南\2.軟件資料\Z32下載調試工具」目錄打開Z32下載調試工具NZDownloadTool.exe。打開Z32的電源開關前,按住Reboot按鍵不放,兩次打開電源開關,Z32便可被電腦識別,進行下載調試。服務器

當左邊框出現「1設備已鏈接」,設備選擇中顯示芯片型號,此時就能夠下載程序了。網絡

點擊「下載」,左邊狀態提示框更新顯示「程序下載成功!」實驗4的程序就下載進Z32的實驗板上了。
實驗4的內容是按鍵中斷,12864顯示屏顯示字符。
關閉Z32電源開關,再打開,程序自動運行,此時能夠看到實驗現象:12864屏幕第一行顯示:「請按reboot按鍵:」
socket

測試五 矩陣鍵盤實驗

實驗目的

  • 學習GPIO原理
  • 掌握Z32安全模塊矩陣鍵盤的工做原理函數

    實驗過程及結果:

    一、打開「Z32開發指南\實驗5-矩陣鍵盤」目錄的工程文件。編譯工程,產生後綴名爲.bin的可執行代碼。工具

二、下載程序
將實驗箱接入電源,用USB公對公線將實驗箱的USB接口鏈接到電腦的USB接口上,在電腦上找到「Z32開發指南\2.軟件資料\Z32下載調試工具」目錄打開Z32下載調試工具NZDownloadTool.exe。打開Z32的電源開關前,按住Reboot按鍵不放,兩次打開電源開關,Z32便可被電腦識別,進行下載調試。學習

當左邊框出現「1設備已鏈接」,設備選擇中顯示芯片型號,此時就能夠下載程序了。測試

點擊「下載」,左邊狀態提示框更新顯示「程序下載成功!」實驗5的程序就下載進Z32的實驗板上了。
實驗5的內容是讀矩陣鍵盤鍵值並顯示。
關閉Z32電源開關,再打開,程序自動運行,此時能夠看到實驗現象:12864屏幕第一行顯示字符串加密

按下矩陣鍵盤上「A」鍵,屏幕第二行顯示「A」。

測試六 TIMER定時器實驗

實驗目的

  • 學習TIMER定時器原理
  • 掌握Z32安全模塊定時器的工做原理

    實驗過程及結果:

    一、打開「Z32開發指南\實驗6-TIMER定時器」目錄的工程文件。編譯工程,產生後綴名爲.bin的可執行代碼。

二、下載程序
將實驗箱接入電源,用USB公對公線將實驗箱的USB接口鏈接到電腦的USB接口上,在電腦上找到「Z32開發指南\2.軟件資料\Z32下載調試工具」目錄打開Z32下載調試工具NZDownloadTool.exe。打開Z32的電源開關前,按住Reboot按鍵不放,兩次打開電源開關,Z32便可被電腦識別,進行下載調試。

當左邊框出現「1設備已鏈接」,設備選擇中顯示芯片型號,此時就能夠下載程序了。

點擊「下載」,左邊狀態提示框更新顯示「程序下載成功!」實驗6的程序就下載進Z32的實驗板上了。
實驗6的內容是定時器溢出中斷,控制LED燈以0.5Hz頻率亮滅,並將0~9秒循環計數顯示在12864顯示屏上。
關閉Z32電源開關,再打開,程序自動運行,此時能夠看到實驗現象:Z32核心板上的燈L2以0.5Hz頻率閃爍,12864屏幕上顯示「定時器測試:」,第二行循環顯示從0到9的秒計數值。
每隔1秒燈L2亮或滅一次,當計數值爲偶數時,燈L2亮,計數值爲奇數時,燈L2滅。

SM3加密實驗

實驗目的

  • 學習SM3加密算法原理,掌握SM3加密算法用法

實驗過程及結果:

一、打開「Z32開發指南\實驗10-SM3」目錄的工程文件。編譯工程,產生後綴名爲.bin的可執行代碼。
二、下載程序
將實驗箱接入電源,用USB公對公線將實驗箱的USB接口鏈接到電腦的USB接口上,在電腦上找到「Z32開發指南\2.軟件資料\Z32下載調試工具」目錄打開Z32下載調試工具NZDownloadTool.exe。打開Z32的電源開關前,按住Reboot按鍵不放,兩次打開電源開關,Z32便可被電腦識別,進行下載調試。
當左邊框出現「1設備已鏈接」,設備選擇中顯示芯片型號,此時就能夠下載程序了。
點擊「下載」,左邊狀態提示框更新顯示「程序下載成功!」實驗10的程序就下載進Z32的實驗板上了。
實驗9的內容是SM3數據加密實驗。本實驗使用Z32內置函數庫實現加密算法。
咱們用9針串口線將Z32模塊的串口與電腦USB接口鏈接。
首先在電腦上打開串口助手,選擇對應的串口號,設置波特率爲115200,偶校驗(Even),而後打開串口。
關閉Z32電源開關,再打開,程序自動運行,此時能夠看到實驗現象:液晶屏上顯示「SM2實驗!請看串口助手」。
串口助手上提示:「請輸入須要雜湊的數據(64字節之內),並按A鍵確認」。
在字符串輸入框輸入數據「wsq」,點擊發送。
按下「A」鍵後進行,加密,串口調試助手顯示被雜湊加密後的數據。

串口助手顯示雜湊加密後數據

完成客戶端與服務器通信的代碼

#include <stdio.h>  
    #include <sys/types.h>  
    #include <sys/socket.h>  
    #include <netinet/in.h>  
    #include <arpa/inet.h>  
      
    int main(int argc, char *argv[])  
    {  
        int server_sockfd;//服務器端套接字  
        int client_sockfd;//客戶端套接字  
        int len;  
        struct sockaddr_in my_addr;   //服務器網絡地址結構體  
        struct sockaddr_in remote_addr; //客戶端網絡地址結構體  
        int sin_size;  
        char buf[BUFSIZ];  //數據傳送的緩衝區  
        memset(&my_addr,0,sizeof(my_addr)); //數據初始化--清零  
        my_addr.sin_family=AF_INET; //設置爲IP通訊  
        my_addr.sin_addr.s_addr=INADDR_ANY;//服務器IP地址--容許鏈接到全部本地地址上  
        my_addr.sin_port=htons(8000); //服務器端口號  
          
        /*建立服務器端套接字--IPv4協議,面向鏈接通訊,TCP協議*/  
        if((server_sockfd=socket(PF_INET,SOCK_STREAM,0))<0)  
        {    
            perror("socket");  
            return 1;  
        }  
       
            /*將套接字綁定到服務器的網絡地址上*/  
        if (bind(server_sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))<0)  
        {  
            perror("bind");  
            return 1;  
        }  
          
        /*監聽鏈接請求--監聽隊列長度爲5*/  
        listen(server_sockfd,5);  
          
        sin_size=sizeof(struct sockaddr_in);  
          
        /*等待客戶端鏈接請求到達*/  
        if((client_sockfd=accept(server_sockfd,(struct sockaddr *)&remote_addr,&sin_size))<0)  
        {  
            perror("accept");  
            return 1;  
        }  
        printf("accept client %s\n",inet_ntoa(remote_addr.sin_addr));  
        len=send(client_sockfd,"Welcome to my server\n 客戶端IP127.0.0.3\n 服務器實現者學號20155206\n 當前時間2018.5.26\n",21,0);//發送歡迎信息  
          
        /*接收客戶端的數據並將其發送給客戶端--recv返回接收到的字節數,send返回發送的字節數*/  
        while((len=recv(client_sockfd,buf,BUFSIZ,0))>0) 
        {  
            buf[len]='\0';  
            printf("%s\n",buf);  
            if(send(client_sockfd,buf,len,0)<0)  
            {  
                perror("write");  
                return 1;  
            }  
        }  
        close(client_sockfd);  
        close(server_sockfd);  
            return 0;  
    }

實驗中遇到的問題

本次實驗在小組三人的共同努力下完成,可是試驗箱出現問題,兩個實驗模塊不能同時使用,在同時打開使用時下載進去的代碼總有幾段是沒法運行的;同時,今天小組內檢查實驗完成狀況時,在用超級終端與試驗箱鏈接時總會不停的自動斷開,而後再次自動鏈接,經反覆實驗,發現是數據線的問題,有點接觸不良形成的。
相關文章
相關標籤/搜索