日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

openssl java des_OPENSSL库的使用-DES篇

發布時間:2024/3/12 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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模式 的簡單講解 &amp&semi;&amp&semi; C&plus;&plus;用openssl庫來實現的注意事項

DES cbc是基于數據塊加密的.數據塊的長度為8字節64bit.以數據塊為單位循環加密,再拼接.每個數據塊加密的秘鑰一樣,IV向量不同.第一個數據快所需的IV向量,需要我們提供,從第二個數據塊開始, ...

C&plus;&plus; 使用openssl庫實現 DES 加密——CBC模式 &amp&semi;&amp&semi; RSA加密——公加私解——私加公解

之前工作上需要用C++把軟件生成的用戶序列號用des加密cbc的模式,加密后為二進制,轉化為十六進制,然后提供給java寫的授權碼管理平臺. java平臺會根據用戶序列號,生成一個授權碼,授權碼是用r ...

使用openssl庫實現des&comma;3des加密

總結

以上是生活随笔為你收集整理的openssl java des_OPENSSL库的使用-DES篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。