日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

《基于Python的GMSSL實(shí)現(xiàn)》課程設(shè)計(jì)個(gè)人報(bào)告

系統(tǒng) 2087 0

《基于Python的GMSSL實(shí)現(xiàn)》課程設(shè)計(jì)個(gè)人報(bào)告

一、基本信息

姓名 :劉津甫

學(xué)號(hào) :20165234

題目 :GMSSL基于python的實(shí)現(xiàn)

指導(dǎo)老師 :婁嘉鵬

完成時(shí)間 :2019年5月6日---2019年5月26日

驗(yàn)收時(shí)間 :2019年5月27日

小組成員 :楊靖濤,譚笑,劉津甫

二、個(gè)人貢獻(xiàn)

1. 收集相關(guān)資料并分享(相關(guān)博客、Python教程等)

2. 學(xué)習(xí)并搭建實(shí)驗(yàn)所需環(huán)境

3. 實(shí)現(xiàn)sm4算法的加解密

三、任務(wù)內(nèi)容

1.?用Python語(yǔ)句調(diào)用gmssl以實(shí)現(xiàn)sm4

2. 實(shí)現(xiàn)用gmssl加密通信的功能

四、實(shí)踐過程

(一)學(xué)習(xí)并熟悉Python

思維導(dǎo)圖如下:

?(二)上手SM4算法

國(guó)產(chǎn)密碼算法介紹

國(guó)產(chǎn)密碼算法(國(guó)密算法)是指國(guó)家密碼局認(rèn)定的國(guó)產(chǎn)商用密碼算法,在金融領(lǐng)域目前主要使用公開的SM2、SM3、SM4三類算法,分別是非對(duì)稱算法、哈希算法和對(duì)稱算法。

SM2算法:SM2橢圓曲線公鑰密碼算法是我國(guó)自主設(shè)計(jì)的公鑰密碼算法,包括SM2-1橢圓曲線數(shù)字簽名算法,SM2-2橢圓曲線密鑰交換協(xié)議,SM2-3橢圓曲線公鑰加密算法,分別用于實(shí)現(xiàn)數(shù)字簽名密鑰協(xié)商和數(shù)據(jù)加密等功能。SM2算法與RSA算法不同的是,SM2算法是基于橢圓曲線上點(diǎn)群離散對(duì)數(shù)難題,相對(duì)于RSA算法,256位的SM2密碼強(qiáng)度已經(jīng)比2048位的RSA密碼強(qiáng)度要高。

SM3算法:SM3雜湊算法是我國(guó)自主設(shè)計(jì)的密碼雜湊算法,適用于商用密碼應(yīng)用中的數(shù)字簽名和驗(yàn)證消息認(rèn)證碼的生成與驗(yàn)證以及隨機(jī)數(shù)的生成,可滿足多種密碼應(yīng)用的安全需求。為了保證雜湊算法的安全性,其產(chǎn)生的雜湊值的長(zhǎng)度不應(yīng)太短,例如MD5輸出128比特雜湊值,輸出長(zhǎng)度太短,影響其安全性SHA-1算法的輸出長(zhǎng)度為160比特,SM3算法的輸出長(zhǎng)度為256比特,因此SM3算法的安全性要高于MD5算法和SHA-1算法。

SM4算法 :SM4分組密碼算法是我國(guó)自主設(shè)計(jì)的分組對(duì)稱密碼算法,用于實(shí)現(xiàn)數(shù)據(jù)的加密/解密運(yùn)算,以保證數(shù)據(jù)和信息的機(jī)密性。要保證一個(gè)對(duì)稱密碼算法的安全性的基本條件是其具備足夠的密鑰長(zhǎng)度,SM4算法與AES算法具有相同的密鑰長(zhǎng)度分組長(zhǎng)度128比特,因此在安全性上高于3DES算法。

《基于Python的GMSSL實(shí)現(xiàn)》課程設(shè)計(jì)個(gè)人報(bào)告_第1張圖片

完成SM4算法的代碼

            
              from
            
            
               gmssl.sm4 import CryptSM4, SM4_ENCRYPT, SM4_DECRYPT

key 
            
            = b
            
              '
            
            
              3l5butlj26hvv313
            
            
              '
            
            
              
value 
            
            = b
            
              '
            
            
              111
            
            
              '
            
            
               #  bytes類型
iv 
            
            = b
            
              '
            
            
              \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
            
            
              '
            
            
               #  bytes類型
crypt_sm4 
            
            =
            
               CryptSM4()


crypt_sm4.set_key(key, SM4_ENCRYPT)
encrypt_value 
            
            =
            
               crypt_sm4.crypt_ecb(value) #  bytes類型
print(
            
            
              '
            
            
              加密成功!
            
            
              '
            
            
              )
print(
            
            
              '
            
            
              加密結(jié)果為:\n
            
            
              '
            
            
              , encrypt_value)
print(
            
            
              '
            
            
              \n
            
            
              '
            
            
              )
crypt_sm4.set_key(key, SM4_DECRYPT)
decrypt_value 
            
            =
            
               crypt_sm4.crypt_ecb(encrypt_value) #  bytes類型
print(
            
            
              '
            
            
              解密成功!\n解密結(jié)果為:
            
            
              '
            
            
              , decrypt_value)
print(
            
            
              '
            
            
              \n
            
            
              '
            
            
              )
assert value 
            
            ==
            
               decrypt_value
print(
            
            
              '
            
            
              decrypt_value==value?
            
            
              '
            
            ,value ==
            
               decrypt_value)
print(
            
            
              '
            
            
              完成加解密!
            
            
              '
            
            )
          

五、實(shí)驗(yàn)中遇到的問題

在安裝gmssl時(shí)遇到了如下問題:

由紅色報(bào)錯(cuò)內(nèi)容可猜測(cè)是權(quán)限問題

? 《基于Python的GMSSL實(shí)現(xiàn)》課程設(shè)計(jì)個(gè)人報(bào)告_第2張圖片

更換至管理員權(quán)限的命令行,成功解決:

《基于Python的GMSSL實(shí)現(xiàn)》課程設(shè)計(jì)個(gè)人報(bào)告_第3張圖片

六、設(shè)計(jì)體會(huì)及收獲

我負(fù)責(zé)的部分是實(shí)現(xiàn)sm4算法,中途和老師交流以后發(fā)現(xiàn)我們小組對(duì)題目理解有偏差,應(yīng)該做的是用Python語(yǔ)句調(diào)用gmssl以實(shí)現(xiàn)相應(yīng)的功能。
從前兩周的探索到最終成功,從學(xué)習(xí)基本語(yǔ)言到深入理解算法再到最終實(shí)現(xiàn)自己負(fù)責(zé)的板塊,收獲很大,同時(shí)也要感謝老師和隊(duì)友整個(gè)過程的幫助!

七、課程設(shè)計(jì)參考資料

  • 通過git上傳本地代碼到碼云倉(cāng)庫(kù)

  • git命令行的使用

  • 國(guó)密算法概述

  • python開發(fā)環(huán)境的搭建

  • 國(guó)密算法學(xué)習(xí)整理

  • 關(guān)于國(guó)密算法 SM1,SM2,SM3,SM4 的筆記

  • GMSSL安裝與使用

  • 國(guó)密工具箱
  • pyOpenssl簡(jiǎn)介
  • 基于Python和GMSSL實(shí)現(xiàn)的SSL網(wǎng)絡(luò)通信


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 洪雅县| 电白县| 阿合奇县| 曲阜市| 蓬莱市| 高密市| 景德镇市| 金寨县| 海安县| 澄迈县| 安龙县| 黄平县| 锡林郭勒盟| 永吉县| 龙南县| 澜沧| 潢川县| 南江县| 诸城市| 巨鹿县| 峡江县| 于田县| 敦化市| 德阳市| 泾源县| 娱乐| 逊克县| 苗栗县| 大名县| 上虞市| 清水河县| 万载县| 炉霍县| 扎鲁特旗| 贺兰县| 清流县| 宜兰市| 淳化县| 大新县| 青冈县| 泸西县|