国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python實現(xiàn)國家商用密碼算法sm2/sm3/sm4/sm9(國密)

這篇具有很好參考價值的文章主要介紹了Python實現(xiàn)國家商用密碼算法sm2/sm3/sm4/sm9(國密)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

2010 年開始,我國國家密碼管理局就已經(jīng)開始陸續(xù)發(fā)布了一系列國產(chǎn)加密算法,這其中就包括 SM1、SM2、SM3 、SM4、SM7、SM9、ZUC(祖沖之加密算法)等,SM 代表商密,即商業(yè)密碼,是指用于商業(yè)的、不涉及國家秘密的密碼技術(shù)。SM1 和 SM7 的算法不公開,其余算法都已成為 ISO/IEC 國際標(biāo)準(zhǔn)。目前應(yīng)用較多的是SM2、SM3和SM4算法,這三者用法不一。

區(qū)別

加密算法 定義 應(yīng)用領(lǐng)域 特點 類似算法 是否公開
sm1 對稱加密算法 芯片 分組長度、密鑰長度均為128比特 DES、3DES 不公開
sm2 非對稱加密算法 數(shù)據(jù)加密 ECC橢圓曲線密碼機制256位,相比RSA處理速度快,消耗更少 RSA、RSA4096 公開
sm3 散列函數(shù)算法 完整性校驗 哈希算法安全性及效率與SHA-256相當(dāng),壓縮函數(shù)更復(fù)雜 SHA1、SHA-256、SHA-384、SHA-512 公開
sm4 對稱加密算法 數(shù)據(jù)加密和局域網(wǎng)產(chǎn)品 分組長度、密鑰長度均為128比特,計算輪數(shù)多 DES、AES 公開
sm7 對稱加密算法 非接觸式IC卡 分組長度、密鑰長度均為128比特 不公開
sm9 標(biāo)識加密算法(IBC) 端對端離線安全通訊 加密強度等同于3072位密鑰的RSA加密算法 公開
ZUC 對稱加密算法 移動通信、4G網(wǎng)絡(luò) 流密碼 公開

SM2

SM2算法和RSA算法都是公鑰密碼算法,SM2算法是一種更先進安全的算法,在我們國家商用密碼體系中被用來替換RSA算法。
隨著密碼技術(shù)和計算機技術(shù)的發(fā)展,目前常用的1024位RSA算法面臨嚴(yán)重的安全威脅,我們國家密碼管理部門經(jīng)過研究,決定采用SM2橢圓曲線算法替換RSA算法。
密文數(shù)據(jù)順序簡介
SM2非對稱加密的結(jié)果由C1,C2,C3三部分組成。其中C1是根據(jù)生成的隨機數(shù)計算出的橢圓曲線點,C2是密文數(shù)據(jù),C3是SM3的摘要值。最開始的國密標(biāo)準(zhǔn)的結(jié)果是按C1,C2,C3順序存放的,新標(biāo)準(zhǔn)的是按C1,C3,C2順序存放的,因此我們這邊在做SM2加密時新增了密文數(shù)據(jù)順序設(shè)置,用以兼容之前的SM2算法加密。

import base64
import binascii
from gmssl import sm2, func


def test_sm2():
    private_key = '00B9AB0B828FF68872F21A837FC303668428DEA11DCD1B24429D0C99E24EED83D5'
    public_key = 'B9C9A6E04E9C91F7BA880429273747D7EF5DDEB0BB2FF6317EB00BEF331A83081A6994B8993F3F5D6EADDDB81872266C87C018FB4162F5AF347B483E24620207'

    sm2_crypt = sm2.CryptSM2(
        public_key=public_key, private_key=private_key)
    data = b"111"
    enc_data = sm2_crypt.encrypt(data)
    #print("enc_data:%s" % enc_data)
    #print("enc_data_base64:%s" % base64.b64encode(bytes.fromhex(enc_data)))
    dec_data = sm2_crypt.decrypt(enc_data)
    print(b"dec_data:%s" % dec_data)
    assert data == dec_data

    print("-----------------test sign and verify---------------")
    random_hex_str = func.random_hex(sm2_crypt.para_len)
    sign = sm2_crypt.sign(data, random_hex_str)
    print('sign:%s' % sign)
    verify = sm2_crypt.verify(sign, data)
    print('verify:%s' % verify)
    assert verify

    
def test_sm2sm3():
     private_key = "3945208F7B2144B13F36E38AC6D39F95889393692860B51A42FB81EF4DF7C5B8"
     public_key = "09F9DF311E5421A150DD7D161E4BC5C672179FAD1833FC076BB08FF356F35020"\
                  "CCEA490CE26775A52DC6EA718CC1AA600AED05FBF35E084A6632F6072DA9AD13"
     random_hex_str = "59276E27D506861A16680F3AD9C02DCCEF3CC1FA3CDBE4CE6D54B80DEAC1BC21"

     sm2_crypt = sm2.CryptSM2(public_key=public_key, private_key=private_key)
     data = b"message digest"

     print("-----------------test SM2withSM3 sign and verify---------------")
     sign = sm2_crypt.sign_with_sm3(data, random_hex_str)
     print('sign: %s' % sign)
     verify = sm2_crypt.verify_with_sm3(sign, data)
     print('verify: %s' % verify)
     assert verify


if __name__ == '__main__':
    test_sm2()
    test_sm2sm3()

SM3

SM3國密雜湊在線工具。支持常規(guī)的字符SM3計算,亦支持文件SM3計算。文件無需上傳至服務(wù)器,且不存在任何限制,在瀏覽器內(nèi)即可完成SM3哈希值計算。編碼類型(utf8/gbk等)只影響常規(guī)字符SM3計算。SM3國密相關(guān)技術(shù)細(xì)節(jié)請參考:《SM3密碼雜湊算法》

from gmssl import sm3, func

if __name__ == '__main__':
    y = sm3.sm3_hash(func.bytes_to_list(b"abc"))
    print(y)

SM4

SM4.0(原名SMS4.0)是中華人民共和國政府采用的一種分組密碼標(biāo)準(zhǔn),由國家密碼管理局于2012年3月21日發(fā)布。相關(guān)標(biāo)準(zhǔn)為“GM/T 0002-2012《SM4分組密碼算法》(原SMS4分組密碼算法)”。
在商用密碼體系中,SM4主要用于數(shù)據(jù)加密,其算法公開,分組長度與密鑰長度均為128bit,加密算法與密鑰擴展算法都采用32輪非線性迭代結(jié)構(gòu),S盒為固定的8比特輸入8比特輸出。
SM4.0中的指令長度被提升到大于64K(即64×1024)的水平,這是SM 3.0規(guī)格(渲染指令長度允許大于512)的128倍。

from gmssl.sm4 import CryptSM4, SM4_ENCRYPT, SM4_DECRYPT

key = b'3l5butlj26hvv313'
value = b'111'
iv = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
crypt_sm4 = CryptSM4()

crypt_sm4.set_key(key, SM4_ENCRYPT)
encrypt_value = crypt_sm4.crypt_ecb(value)
crypt_sm4.set_key(key, SM4_DECRYPT)
decrypt_value = crypt_sm4.crypt_ecb(encrypt_value)
assert value == decrypt_value

crypt_sm4.set_key(key, SM4_ENCRYPT)
encrypt_value = crypt_sm4.crypt_cbc(iv , value)
crypt_sm4.set_key(key, SM4_DECRYPT)
decrypt_value = crypt_sm4.crypt_cbc(iv , encrypt_value)
assert value == decrypt_value

SM9



from gmssl import sm9

if __name__ == '__main__':
    idA = 'a'
    idB = 'b'

    print ("-----------------test sign and verify---------------")
    
    master_public, master_secret = sm9.setup ('sign')

    Da = sm9.private_key_extract ('sign', master_public, master_secret, idA)
    
    message = 'abc'
    signature = sm9.sign (master_public, Da, message)

    assert (sm9.verify (master_public, idA, message, signature))

    print ("\t\t\t success")

    print ("-----------------test key agreement---------------")
    
    master_public, master_secret = sm9.setup ('keyagreement')

    Da = sm9.private_key_extract ('keyagreement', master_public, master_secret, idA)
    Db = sm9.private_key_extract ('keyagreement', master_public, master_secret, idB)

    xa, Ra = sm9.generate_ephemeral (master_public, idB)
    xb, Rb = sm9.generate_ephemeral (master_public, idA)

    ska = sm9.generate_session_key (idA, idB, Ra, Rb, Da, xa, master_public, 'A', 128)
    skb = sm9.generate_session_key (idA, idB, Ra, Rb, Db, xb, master_public, 'B', 128)

    assert (ska == skb)

    print ("\t\t\t success")
    
    print ("-----------------test encrypt and decrypt---------------")

    master_public, master_secret = sm9.setup ('encrypt')

    Da = sm9.private_key_extract ('encrypt', master_public, master_secret, idA)

    message = 'abc'
    ct = sm9.kem_dem_enc (master_public, idA, message, 32)
    pt = sm9.kem_dem_dec (master_public, idA, Da, ct, 32)

    assert (message == pt)

    print ("\t\t\t success")

參考

https://github.com/gongxian-ding/gmssl-python
https://github.com/duanhongyi/gmssl
https://www.lzltool.com/SM2文章來源地址http://www.zghlxwxcb.cn/news/detail-558508.html

到了這里,關(guān)于Python實現(xiàn)國家商用密碼算法sm2/sm3/sm4/sm9(國密)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • react+vue 前端國密算法sm2、sm3 、sm4的js ts實現(xiàn)

    1. 簡單介紹下SM2 和 SM3 SM2 算法:是一種公鑰加密算法,它的密鑰長度為 256 位,安全性較高??捎糜跀?shù)字簽名、密鑰協(xié)商等場景。 SM3 算法:是一種對稱加密算法,用于消息摘要和數(shù)字簽名等場景。它的密鑰長度為 256 位,安全性較高。SM3 算法與 SM2 算法相互配合,提高了整體

    2024年01月19日
    瀏覽(33)
  • 使用 Java Bouncy Castle實現(xiàn)國密算法SM4、SM3以及SM2的加密

    使用 Java Bouncy Castle實現(xiàn)國密算法SM4、SM3以及SM2的加密

    國密算法的實現(xiàn)借助了Java庫函數(shù) Bouncy Castle,加密庫安裝使用教程請參考鏈接 SM4,又稱為商密算法,是一種分組密碼算法,于2012年由中國密碼技術(shù)研究中心(中國密碼學(xué)會成員)發(fā)布,目前已成為我國國家密碼算法,并在多個領(lǐng)域得到了廣泛的應(yīng)用。SM4算法采用了32輪迭代結(jié)

    2024年02月16日
    瀏覽(34)
  • 國密算法概述、及算法的集成應(yīng)用(sm2、sm3、sm4)

    國密算法概述、及算法的集成應(yīng)用(sm2、sm3、sm4)

    由于項目的需求,需要集成國密加解密,于是對國密又溫故知新了一遍。同時整理了一下國密的一些算法。 本文主要從國密相關(guān)算法的簡介、應(yīng)用系統(tǒng)的集成、工具類的封裝等方面入手,對國密進行深入的學(xué)習(xí)。 為了保障商用密碼的安全性,國家密碼局制定了一系列密碼標(biāo)

    2024年02月14日
    瀏覽(29)
  • java 國密算法工具類(支持SM2 SM3 SM4)

    前言 工具采用BC庫實現(xiàn),支持前后端加解密,前端建議使用sm-crypto 引入pom依賴 基本使用如下 國密SM2算法 國密SM3算法 國密SM4算法使用

    2024年02月13日
    瀏覽(25)
  • vue中使用國密算法SM2、SM3、SM4

    gm-crypto相關(guān)文檔:https://gitcode.net/mirrors/byte-fe/gm-crypto?utm_source=csdn_github_accelerator vue3+element ui例子:https://gitee.com/huanglgln/vue-sys-manage-el ?vue3+view ui例子:https://gitee.com/huanglgln/vue-sys-manage ?vue3+Ant Design Vue ui例子:https://gitee.com/huanglgln/vue-sys-manage-adv?

    2024年02月15日
    瀏覽(34)
  • 探索密碼學(xué)的未來:SM1、SM2、SM3、SM4、同態(tài)加密、密態(tài)計算、隱私計算和安全多方計算

    密碼算法在現(xiàn)代通信與信息安全中發(fā)揮著至關(guān)重要的作用,SM1、SM2、SM3、SM4、同態(tài)加密、密態(tài)計算、隱私計算和安全多方計算等密碼算法被廣泛應(yīng)用于各種信息安全領(lǐng)域。本篇博客將會為大家介紹這些密碼算法,以及它們在信息安全中的作用和應(yīng)用。 SM1、SM2、SM3、SM4是中國國

    2024年02月08日
    瀏覽(20)
  • 國密商用密碼SM3雜湊算法原理分析與Java實現(xiàn)

    國密商用密碼SM3雜湊算法原理分析與Java實現(xiàn)

    國密SM3算法是我國自研設(shè)計的商用密碼雜湊算法,是在SHA-256的基礎(chǔ)上進行改造的,其安全性與SHA-256相當(dāng)?!禨M3密碼雜湊算法》于2010年12月份由國家密碼管理局首次發(fā)布。后于2012年發(fā)布為密碼行業(yè)標(biāo)準(zhǔn)《GM/T 0004-2012 SM3密碼雜湊算法》,2016年發(fā)布為國家密碼雜湊算法標(biāo)準(zhǔn)《GB

    2024年02月04日
    瀏覽(89)
  • 商用密碼應(yīng)用與安全性評估要點筆記(SM3密碼雜湊算法)

    1、雜湊密碼算法 ? ? ? ? 可以對任意長度的消息M進行壓縮,輸出定長的消息摘要/雜湊值h,表示為h = H(M)。 ? ? ? ? 一般來說,H具備三個性質(zhì): ? ? ? ? (1)單向性。已知h,試圖找打M滿足h=H(M)是困難的。 ? ? ? ? (2)抗第二/二次原像攻擊(弱抗碰撞性)。給定M1,試圖

    2024年02月01日
    瀏覽(27)
  • 前端國密加解密使用方法SM2、SM3、SM4

    ? ?國密算法,即國家商用密碼算法。是由國家密碼管理局認(rèn)定和公布的密碼算法標(biāo)準(zhǔn)及其應(yīng)用規(guī)范,其中部分密碼算法已經(jīng)成為國際標(biāo)準(zhǔn)。如SM系列密碼,SM代表商密,即商業(yè)密碼,是指用于商業(yè)的、不涉及國家秘密的密碼技術(shù)。 ? ? ?不多廢話直接上干貨 項目中 可能存在

    2023年04月09日
    瀏覽(102)
  • vue普通加密以及國密SM2、SM3、sm4的使用

    sm-crypto:https://www.npmjs.com/package/sm-crypto 1. SM2是非對稱加密算法 它是基于橢圓曲線密碼的公鑰密碼算法標(biāo)準(zhǔn),其秘鑰長度256bit,包含數(shù)字簽名、密鑰交換和公鑰加密,用于替換RSA/DH/ECDSA/ECDH等國際算法??梢詽M足電子認(rèn)證服務(wù)系統(tǒng)等應(yīng)用需求,由國家密碼管理局于2010年12月17號

    2023年04月09日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包