基本信息
源码名称:国密SM4的5种加密模式(ECB CBC CFB OFB CTR XTS)源码及其参考文档
源码大小:1.36M
文件格式:.rar
开发语言:C/C++
更新时间:2019-07-16
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559
本次赞助数额为: 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");
*/
}