加密算法

 

十六進制字符串轉化爲字符算法

例如十六進制字符串爲: 138CE5B32C0E9126C291E970EA98764C算法

那麼,兩位十六進制合成一個字符:13(hex)->1*16+3=19,那麼字符的整數形式則爲19函數

字符轉化爲十六進制字符串

例如字符的整數形式爲17->17/16,17%16->11(hex)加密

主密鑰:

主密鑰是有三組份量的,一個份量爲8位,則主密鑰的長度爲24位spa

可是目前機端只支持兩組份量,那麼密鑰的第三個份量則使用第一個份量的值來合成24位的密鑰(名稱爲3des雙倍長)3d

 

明文份量1 :138CE5B32C0E9126C291E970EA98764Cssl

明文份量2 :1FD3C2437F6EE6DCD9383E1A49E9674Cci

成份1校驗值:FA16CB字符串

成份2校驗值:906256openssl

合成後校驗值:9BAE3Etable

加密後的主密鑰:  C24CC457EEA2ACB556DB514BFF15AE0B

 

主密鑰明文 =  明文份量1 異或  明文份量2 

根據上面的數據,主密鑰明文爲0C5F27F0536077FA1BA9D76AA3711100

 

工做密鑰

Pinkey

Pinkey是用來對pinblock進行加密的密鑰

咱們獲得的通常是pinkey的密文,是經過主密鑰3des加密而成的,3des的加解密能夠經過openssl庫來實現.

3des加解密函數: DES_ecb3_encrypt

咱們經過主密鑰明文對pinkey密文進行3des解密,獲得pinkey明文,而後拿着pinkey明文進行pinblock的運算

Mackey

Mackey是用來對macdata進行加密的密鑰,具體加密過程,參見mac運算章節

咱們獲得的是mackey的密文,是主密鑰經過3des加密而成, 3des的加解密能夠經過openssl庫來實現.

3des加解密函數: DES_ecb3_encrypt

咱們經過主密鑰明文對mackey密文進行3des解密,獲得mackey明文,而後拿着mackey明文進行mac運算

Pinblock

Pinblock是使用卡號和密碼進行運算獲得的一串字符.

首先壓縮密碼:

例如密碼爲123456

壓縮成8位字符串

0->6     //密碼位數

1->18    //密碼第一位1*16加上密碼第二位2 ->1*16+2=18

2->52    //密碼第三位3*16加上密碼第四位4 ->3*16+4=52

3->86    //密碼第五位5*16加上密碼第六位6 ->5*16+6=86

4->255   //固定值

5->255   //固定值

6->255   //固定值

7->255   //固定值

獲得密碼8位串PASSWORD_STR:

6

18

52

86

255

255

255

255

 

對賬號進行轉換:

取賬號右12位(不包括最後一位校驗位),不足12位右補0x00,而後對12位進行壓縮成8位字符串

例如賬號爲00123456789012

壓縮成8位字符串

0->0    //固定爲0

1->0    //固定爲0

2->18   //第一位1*16加上第二位2 ->1*16+2=18

3->52   //第三位3*16加上第四位4 ->3*16+4=52

4->86   //……

5->120  //……

6->144  //……

7->18   //……

獲得賬號8位串ACCOUNTNO_STR

0

0

18

52

86

120

144

18

 

獲得pinblock明文

對ACCOUNTNO_STR異或PASSWORD_STR

PASSWORD_STR

6

18

52

86

255

255

255

255

ACCOUNTNO_STR

0

0

18

52

86

120

144

18

pinblock明文

6

18

53

117

186

152

118

254

獲得pinblock明文: 06123575BA9876FE

獲得pinblock密文

對pinblock明文使用pinkey明文經過3des加密,最終獲得pinblock密文

 

Mac運算

mac是經過mackey明文使用ANSIX9.19加密生成的

ANSIX9.19算法

密鑰長度爲32位(hex格式)

程序獲得macdata串,若是macdata串長度不爲8的倍數,則右補0x00,補夠8的倍數

設置初始向量E0= x00x00x00x00x00x00x00x00(八位0)

把macdata串分紅每組8位:D1,D2,D3……DN

使用向量跟macdata的八位串進行異或E0^D1->F-->使用密鑰左16位進行DES加密-->E1

E1^D2----->E2

…….

E(N-1)^DN---->EN

使用密鑰右16位對EN進行DES解密,獲得En0

使用密鑰左16位對EN進行DES加密,獲得En1

En1爲最終的mac

des加解密函數: DES_ecb_encrypt

相關文章
相關標籤/搜索