openssl java des_OPENSSL库的使用-DES篇

一、单DES算法ECB模式加解密

1、使用函数DES_set_key_unchecked设置密钥

2、使用函数DES_ecb_encrypt来进行数据加解密

void DES_ecb_encrypt(const_DES_cblock *input,DES_cblock *output,

DES_key_schedule *ks,int enc);

函数功能说明:DES ECB计算

参数说明:

input: 输入数据;(8字节长度)

output: 输出数据;(8字节长度)

ks: 密钥;

enc:加密:DES_ENCRYPT , 解密:DES_DECRYPT;

二、单DES算法CBC模式加解密

1、使用函数DES_set_key_unchecked设置密钥

2、使用函数DES_ncbc_encrypt来进行数据加解密

void DES_ncbc_encrypt(const unsigned char *input,unsigned char *output,

long length,DES_key_schedule *schedule,DES_cblock *ivec,

int enc);

参数说明:

input: 输入数据;(8字节长度)

output: 输出数据;(8字节长度)

length: 数据长度;(这里数据长度不包含初始化向量长度)

schedule:密钥;

ivec: 初始化向量;(一般为8个字节0)

enc:加密:DES_ENCRYPT , 解密:DES_DECRYPT;

三、T-DES算法ECB模式加解密

1、使用函数DES_set_key_unchecked设置密钥

2、使用函数DES_ecb3_encrypt来进行加解密

void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,

DES_key_schedule *ks1,DES_key_schedule *ks2,

DES_key_schedule *ks3, int enc);

函数说明:

3DES ECB算法

参数说明:

input: 输入数据

output: 输出数据

ks1,ks2,ks3, 3DES算法的三只密钥,实际应用中,大家更习惯于用两只密钥,调用此函数时,只需在ks3处传入ks1即可;

enc:加密:DES_ENCRYPT , 解密:DES_DECRYPT

四、T-DES算法CBC模式加解密

1、使用函数DES_set_key_unchecked设置密钥

2、使用函数DES_ede3_cbc_encrypt来进行加解密

void DES_ede3_cbc_encrypt(const unsigned char *input,unsigned char *output,

long length,

DES_key_schedule *ks1,DES_key_schedule *ks2,

DES_key_schedule *ks3,DES_cblock *ivec,int enc);

函数功能说明:

3DES CBC模式计算;

参数说明:

input: 输入数据;(8字节长度)

output: 输出数据;(8字节长度)

length: 长度;(这里数据长度不包含初始化向量长度)

ks1:密钥1;(为16字节密钥的左边8字节)

ks2:密钥2;(为16字节密钥的右边8字节)

ks3:密钥3;(为16字节密钥的左边8字节)

ivec:初始化向量;;(一般为8个字节0)

enc:DES_ENCRYPT , 解密:DES_DECRYPT;

五、示例代码

void CPage1::OnButtonEncrypt()

{

// TODO: Add your control notification handler code here

DES_cblock key;

unsigned char key_hex[256] = {0};

unsigned char data_hex[256] = {0};

unsigned char initval_hex[256] = {0};

unsigned char temp[256] = {0};

int i = 0;

int keylen = 0;

int datalen = 0;

int InitialLen = 0;

DES_key_schedule schedule;

DES_key_schedule schedule2;

DES_key_schedule schedule3;

const_DES_cblock input;

DES_cblock output;

DES_cblock ivec;

UpdateData(TRUE);

m_key.Remove(' ');

m_data.Remove(' ');

m_initval.Remove(' ');

keylen = m_key.GetLength()/2;

datalen = m_data.GetLength()/2;

InitialLen = m_initval.GetLength()/2;

if (keylen%8!=0)

{

AfxMessageBox("输入密钥长度不是8的整数倍,请重新输入!");

return;

}

if (datalen%8!=0)

{

AfxMessageBox("输入数据长度不是8的整数倍,请重新输入!");

return;

}

StrToHex(m_key,key_hex,keylen);

StrToHex(m_data,data_hex,datalen);

StrToHex(m_initval,initval_hex,InitialLen);

//单DES密钥设置

if (keylen == 8)

{

memcpy(key,key_hex,keylen);

DES_set_key_unchecked(&key, &schedule);

}

//三DES密钥设置

else if (keylen == 16)

{

memcpy(key,key_hex,8);

DES_set_key_unchecked(&key, &schedule);

memcpy(key,key_hex+8,8);

DES_set_key_unchecked(&key, &schedule2);

memcpy(key,key_hex,8);

DES_set_key_unchecked(&key, &schedule3);

}

memcpy(ivec,initval_hex,InitialLen);

//单DES算法

if (keylen == 8)

{

//ECB模式

if (((CButton*)GetDlgItem(IDC_RADIO1))->GetCheck())

{

for(i = 0;i < datalen/8;i++)

{

memcpy(input,data_hex+i*8,8);

DES_ecb_encrypt(&input, &output, &schedule, DES_ENCRYPT);

memcpy(temp+i*8,output,8);

}

}

//CBC模式

else if (((CButton*)GetDlgItem(IDC_RADIO2))->GetCheck())

{

for(i = 0;i < datalen/8;i++)

{

DES_ncbc_encrypt(data_hex+i*8, temp+i*8,8,&schedule,&ivec, DES_ENCRYPT);

}

}

}

//TDES算法

else if (keylen == 16)

{

//ECB模式

if (((CButton*)GetDlgItem(IDC_RADIO1))->GetCheck())

{

for (i = 0;i < datalen/8;i++)

{

memcpy(input,data_hex+i*8,8);

DES_ecb3_encrypt(&input, &output, &schedule, &schedule2, &schedule3, DES_ENCRYPT);

memcpy(temp+i*8,output,8);

}

}

//CBC模式

else if (((CButton*)GetDlgItem(IDC_RADIO2))->GetCheck())

{

for(i = 0;i < datalen/8;i++)

{

DES_ede3_cbc_encrypt(data_hex+i*8, temp+i*8,8,&schedule, &schedule2, &schedule3,&ivec, DES_ENCRYPT);

}

}

}

HexToStr(temp,datalen,m_result);

UpdateData(FALSE);

}

DES加解密 cbc模式 的简单讲解 &;&; C++用openssl库来实现的注意事项

DES cbc是基于数据块加密的.数据块的长度为8字节64bit.以数据块为单位循环加密,再拼接.每个数据块加密的秘钥一样,IV向量不同.第一个数据快所需的IV向量,需要我们提供,从第二个数据块开始, ...

C++ 使用openssl库实现 DES 加密——CBC模式 &;&; RSA加密——公加私解——私加公解

之前工作上需要用C++把软件生成的用户序列号用des加密cbc的模式,加密后为二进制,转化为十六进制,然后提供给java写的授权码管理平台. java平台会根据用户序列号,生成一个授权码,授权码是用r ...

使用openssl库实现des,3des加密

你可能感兴趣的:(openssl,java,des)