打印加密解密数据的函数:
//函数定义
void print_data(const char *string, unsigned char*data, int size)
{
int i;
printf("---------------------------------------------\n");
printf("%s:\n", string);
for(i=0; i<size; i++)
{
printf("%02x ", data[i]);
if((i%16) == 15)
printf("\n");
}
if(size%16)
printf("\n");
printf("---------------------------------------------\n");
}
//函数调用
void test()
{
unsigned char decdata[16];
unsigned int declen;
r = SDF_Decrypt(hSessionHandle, hKey2, SGD_SM1_ECB, NULL, encdata, enclen, decdata, &declen);
if(r)
{
printf("decrypt data fail:%x\n", r);
return r;
}
print_data("decrypt data:", decdata, declen); //打印数据
}
打印公钥私钥的函数:
//宏定义
#define LOG_DATA(d, l)\
do\
{\
int i;\
for(i=0;i<l;i++)\
{\
if((i+1) % 16) \
printf("%02X ", d[i]);\
else\
printf("%02X\n", d[i]);\
}\
if(i % 16) printf("\n");\
}\
while(0)
//公钥结构体定义
typedef struct RSArefPublicKey_st
{
unsigned int bits;
unsigned char m[RSAref_MAX_LEN];
unsigned char e[RSAref_MAX_LEN];
}RSArefPublicKey;
/* RSA */
#define RSAref_MAX_BITS 2048
#define RSAref_MAX_LEN ((RSAref_MAX_BITS + 7) / 8)
//调用
void test2()
{
RSArefPublicKey rsapubkey;
r = SDF_ExportEncPublicKey_RSA(hSessionHandle, i, &rsapubkey);
if(r)
{
printf("export rsa enc public key fail:%x\n", r);
return r;
}
LOG_DATA(rsapubkey.m, RSAref_MAX_LEN); //打印数据
LOG_DATA(rsapubkey.e, RSAref_MAX_LEN);
}
其实这两个函数基本相似,都差不多