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

sm2簽名與sm4加密(一)

這篇具有很好參考價值的文章主要介紹了sm2簽名與sm4加密(一)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

因為某些不可抗原因,友商加密平臺系統(tǒng)無法提供接口進行加密驗簽,以至于需要自己實現(xiàn)監(jiān)管要求的加密驗簽。

接口要求,報文先經(jīng)過sm2生成簽名,之后進行sm4加密。收到報文后,先進行sm4解密,解密后將報文進行驗簽。驗證成功之后既結(jié)束全部流程。

所以整體上分為兩大部分,一為sm4加密,二為sm2簽名。

首先先說簡單的sm4加密,調(diào)用代碼參考了開源項目openssl。

1.準(zhǔn)備密鑰和需要加密的報文

2.將報文進行分組,每16個字也就是128bit為一組,這里采用最簡單的ECB分組方式,對不足16位的最后一組進行補位,采用pkcs7方式進行補位,就是差幾位就補幾位的幾,比如8位差八位,就補八個八,對于16整數(shù)倍補16位的16(方便解碼)

3.生成輪密鑰,將32位的密鑰分成八位一組的四組,編號為k0k1k2k3,通過互相運算及s盒,得到k4,再選取k1k2k3k4,運算得到k5,。循環(huán)32次,得到k0-k35,選取k4-k35為生成的輪密鑰結(jié)果

4.進行加密,同樣將一組16個字也是32位分成八位一組的四組,輪加密Bi⊕F(B(i-1)⊕B(i-2)⊕B(i-3)⊕k(i-4))得到下一組,最終得到B31-B35,拼成一個串返回這一組的加密結(jié)果,單組加密完畢。

最終把所有組拼在一起就是加密結(jié)果。

解密正好相反,因為必然是16的整數(shù)倍,所以直接分組。將生成的輪密鑰與加密后的報文進行逆運算,最終得到補碼后的原報文,取報文最后一位,截取最后一位對應(yīng)的數(shù)字得到原始信息

參考代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-519148.html


#include "e_os2.h"
#include "sm4.h"

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

void sm4_decrypt_ecb(unsigned char* key,
    int length,
    unsigned char* input,
    unsigned char* output)
{
    unsigned char* tmp=NULL ;
    unsigned char* tmp1 = NULL;
    int length1 = length;


    int bodylength;                /*解密后報文體長度 */
    int pkcs = 0;                      /*補位值 */
    SM4_KEY ks;                   /*輪密鑰結(jié)構(gòu)體 */

    tmp = (unsigned char*)malloc(sizeof(char) * length+1);
    memset(tmp, 0x00, length + 1);
    tmp1 = tmp;
    ossl_sm4_set_key(key, &ks);  /*通過密鑰生成32輪密鑰*/

    while (length1 > 0)
    {
        ossl_sm4_decrypt(input, tmp, &ks); /* 進行單組解密,暫存至tmp*/
        input += 16;
        tmp += 16;
        length1 -= 16;
    }

    bodylength = strlen(tmp1);
    pkcs = (int)tmp1[bodylength - 1];   /*取最后一位pkcs補位字符,轉(zhuǎn)換成數(shù)字*/

    strncpy(output, tmp1, (bodylength - pkcs));  /*去除補位字符,拷貝至輸出*/

    tmp = NULL;
    tmp1 = NULL;
}
void sm4_encrypt_ecb(unsigned char* key,
    int length,
    unsigned char* input,
    unsigned char* output) {
    int bodylength;                /*補位后報文體長度 */
    SM4_KEY ks;                   /*輪密鑰結(jié)構(gòu)體 */
    unsigned char pkcs;                      /*補位值 */
    unsigned char* tmp= output;

    pkcs = 16 - (length % 16);                /*獲取補位值*/
    memset(input + strlen(input), pkcs, pkcs); /*報文補位*/

    ossl_sm4_set_key(key, &ks);  /*通過密鑰生成32輪密鑰*/
    bodylength = strlen(input);
    while (bodylength > 0)
    {
        ossl_sm4_encrypt(input, tmp, &ks); /* 進行單組加密*/
        input += 16;
        tmp += 16;
        bodylength -= 16;
    }
}
void main() {
    char key[16+1] ;
    char input[100];
    char input1[100];
    char output1[100];
    char output[100];

    memset(key,0x00, sizeof(key));
    memset(input, 0x00, sizeof(input));
    memset(input1, 0x00, sizeof(input1));
    memset(output1, 0x00, sizeof(output1));
    memset(output, 0x00, sizeof(output));
    
    strcpy(key, "1234567890abcdef");
    strcpy(input, "1234567890abcdeghhjuuu5555678900uuuuuuu");
    sm4_encrypt_ecb(key, strlen(input), input, output);
    strcpy(input1, output);
    sm4_decrypt_ecb(key, strlen(input1), input1, output1);
    printf("input=[%s],\noutput=[%s]", input, output1);
}

到了這里,關(guān)于sm2簽名與sm4加密(一)的文章就介紹完了。如果您還想了解更多內(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)文章

  • 商用密碼應(yīng)用與安全性評估要點筆記(SM2公鑰加密算法)

    商用密碼應(yīng)用與安全性評估要點筆記(SM2公鑰加密算法)

    1、SM2算法簡介 ? ? ? ? SM2密碼算法是我國2010年發(fā)布的商用密碼算法,屬于公鑰密碼算法,也成為非對稱密鑰機制密碼算法。SM2基于橢圓曲線離散對數(shù)問題,相對于RSA基于大整數(shù)因數(shù)分解更具優(yōu)越性。 ? ? ? ? SM2算法于2012年成為我國密碼行業(yè)標(biāo)準(zhǔn),并于2017年被ISO采納,成為

    2024年02月01日
    瀏覽(26)
  • 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

    2024年02月15日
    瀏覽(32)
  • 新手入門 | 掌握國密算法:新手指南: SM2 / SM3 / SM4密碼算法詳解

    在密碼學(xué)領(lǐng)域,有多種加密與簽名算法,它們在信息安全領(lǐng)域發(fā)揮著舉足輕重的作用。如今,隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)安全已經(jīng)成為各類信息系統(tǒng)完整性、可用性、保密性的重要保障,越來越多的國產(chǎn)密碼算法得到了廣泛的應(yīng)用與關(guān)注。在本文中,我們將重點介紹三個經(jīng)

    2024年02月12日
    瀏覽(36)
  • SM1、SM2、SM3、SM4、同態(tài)加密、密態(tài)計算、隱私計算和安全多方計算的概念

    SM1、SM2、SM3、SM4、同態(tài)加密、密態(tài)計算、隱私計算和安全多方計算的概念

    為了保障商用密碼的安全性,國家密碼局制定了一系列密碼標(biāo)準(zhǔn),包括:SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖沖之密碼算法(ZUC) 等。 SM1、SM4、SM7、祖沖之密碼(ZUC)是 對稱算法 。 SM2、SM9是 非對稱算法 。 SM3是 哈希算法 。 SM1、SM7算法不公開,調(diào)用該算法時,需要通過 加

    2024年02月03日
    瀏覽(25)
  • 使用 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)
  • 國密SM2算法的加密簽名消息語法封裝解析p7格式signedData

    國密SM2算法的加密簽名消息語法封裝解析p7格式signedData

    前文可參考:SM2算法的加密簽名消息語法規(guī)范(三)如何構(gòu)造signedData_天對地,雨對風(fēng)的博客-CSDN博客系列。 這里直接講openssl asn1解析和封裝的部分代碼。 國密?p7格式標(biāo)準(zhǔn),參考:GMT0010-2012 1、p7 簽名結(jié)構(gòu): ?編寫結(jié)構(gòu)體GMTSignedData.h 注意:SM2_SignedData_st結(jié)構(gòu)中的sign類型修改為

    2024年02月11日
    瀏覽(27)
  • SM2橢圓曲線公鑰密碼算法--密鑰對與數(shù)字簽名

    SM2橢圓曲線公鑰密碼算法--密鑰對與數(shù)字簽名

    SM2算法全稱是SM2橢圓曲線公鑰密碼算法(SM是商用密碼的拼音縮寫),是一種基于“橢圓曲線”的密碼ECC(Elliptic Curve Cryptography)。2016年,SM2成為中國國家密碼標(biāo)準(zhǔn)。 在商用密碼體系中,SM2主要用于替換RSA加密算法。 SM2為非對稱加密,基于ECC。該算法已公開。由于該算法基于

    2024年02月11日
    瀏覽(31)
  • java實現(xiàn)國密SM4的加密和解密方式(即時通訊的消息對話加密采用SM2還是SM4)

    java實現(xiàn)國密SM4的加密和解密方式(即時通訊的消息對話加密采用SM2還是SM4)

    1.對于即時通訊的消息對話加密采用SM2還是SM4更合適? 對于即時通訊的消息對話加密,建議采用SM4對稱加密算法,而不是SM2非對稱加密算法。 SM2主要用于數(shù)字簽名和密鑰交換,其加密速度比SM4慢,而且SM2不太適合對長消息進行加密,因為它只能對比較短的數(shù)據(jù)塊進行加密,這

    2024年02月07日
    瀏覽(101)
  • 國密算法 SM4 對稱加密 分組密碼 python實現(xiàn)完整代碼

    國密算法 SM4 對稱加密 分組密碼 python實現(xiàn)完整代碼

    目前,python實現(xiàn)的國密算法庫主要是 python-gmssl 庫和 snowland-smx ( pysmx )庫,二者都對SM2(僅公鑰加解密和數(shù)字簽名)、SM3、SM4進行了細致而優(yōu)雅的實現(xiàn)。 GMSSL. https://github.com/duanhongyi/gmssl snowland-smx. https://gitee.com/snowlandltd/ snowland-smx-python PyCryptodome. https://www.pycryptodome.org 最近用

    2024年02月06日
    瀏覽(27)
  • 國密算法 SM2 公鑰加密 數(shù)字簽名 密鑰交換 全網(wǎng)最高效的開源python代碼

    國密算法 SM2 公鑰加密 數(shù)字簽名 密鑰交換 全網(wǎng)最高效的開源python代碼

    此前發(fā)布過SM2、SM3、SM4、ZUC等文章,以及開源的完整python代碼。近些天看到一篇電子科大蘭同學(xué)的碩士畢業(yè)論文(蘭修文. ECC計算算法的優(yōu)化及其在SM2實現(xiàn)中的運用[D]. 成都: 電子科技大學(xué), 2019),文中采用預(yù)計算加速SM2橢圓曲線基點點乘,將這個思路用python代碼實現(xiàn)后,實測

    2024年02月09日
    瀏覽(54)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包