基本信息
源码名称:国密SM4的5种加密模式(ECB CBC CFB OFB CTR XTS)源码及其参考文档
源码大小:1.36M
文件格式:.rar
开发语言:C/C++
更新时间:2019-07-16
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
/* * SM4/SMS4 algorithm test programme * 2012-4-21 */ #include <string.h> #include <stdio.h> int main() { unsigned char input_f[32] = {0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10}; unsigned char key[16] = {0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10}; unsigned char iv[16] = {0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xa,0xb,0xc,0xd,0xe,0xf}; unsigned char output_f[32]; unsigned long i; unsigned char *input; unsigned char *output; printf("=======================ecb=======================\n"); //encrypt ecb input = input_f; output= output_f; sm4_ecb(key,0,1,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } input = &input_f[16]; output = &output_f[16]; sm4_ecb(key,0,0,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } printf("\n"); //decrypt ecb input = input_f; output= output_f; sm4_ecb(key,1,1,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } input = &input_f[16]; output = &output_f[16]; sm4_ecb(key,1,0,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } printf("\n"); printf("=======================cbc=======================\n"); //encrypt cbc input = input_f; output= output_f; sm4_cbc(key,0,1,iv,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } input = &input_f[16]; output = &output_f[16]; sm4_cbc(key,0,0,iv,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } printf("\n"); //decrypt cbc input = input_f; output= output_f; sm4_cbc(key,1,1,iv,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } input = &input_f[16]; output = &output_f[16]; sm4_cbc(key,1,0,iv,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } printf("\n"); printf("=======================cfb=======================\n"); //encrypt cfb input = input_f; output= output_f; sm4_cfb(key,0,1,iv,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } input = &input_f[16]; output = &output_f[16]; sm4_cfb(key,0,0,iv,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } printf("\n"); //decrypt cfb input = input_f; output= output_f; sm4_cfb(key,1,1,iv,output,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } input = &input_f[16]; output = &output_f[16]; sm4_cfb(key,1,0,iv,output,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } printf("\n"); printf("=======================ofb=======================\n"); //encrypt ofb input = input_f; output= output_f; sm4_ofb(key,0,1,iv,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } input = &input_f[16]; output = &output_f[16]; sm4_ofb(key,0,0,iv,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } printf("\n"); //decrypt ofb input = input_f; output= output_f; sm4_ofb(key,1,1,iv,output,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } input = &input_f[16]; output = &output_f[16]; sm4_ofb(key,1,0,iv,output,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } printf("\n"); printf("=======================ctr=======================\n"); //encrypt ctr input = input_f; output= output_f; sm4_ctr(key,0,1,iv,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } input = &input_f[16]; output = &output_f[16]; sm4_ctr(key,0,0,iv,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } printf("\n"); //decrypt ctr input = input_f; output= output_f; sm4_ctr(key,1,1,iv,output,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } input = &input_f[16]; output = &output_f[16]; sm4_ctr(key,1,0,iv,output,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } printf("\n"); printf("=======================xts=======================\n"); //encrypt xts unsigned char key1[16] ={0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11}; unsigned char key2[16] ={0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22}; input = input_f; output= output_f; sm4_xts(key1,key2,0,1,iv,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } input = &input_f[16]; output = &output_f[16]; sm4_xts(key1,key2,0,0,iv,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } printf("\n"); //decrypt xts input = input_f; output= output_f; sm4_xts(key1,key2,1,1,iv,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } input = &input_f[16]; output = &output_f[16]; sm4_xts(key1,key2,1,0,iv,input,output); for(i=0;i<16;i ){ printf("%02x ", output[i]); input[i] = output[i]; } printf("\n"); /* //decrypt 1M times testing vector based on standards. i = 0; while (i<1000000) { sm4_ecb(key,0,16,input,input); i ; } for(i=0;i<16;i ) printf("%02x ", input[i]); printf("\n"); */ }