金鑰分散演算法簡析

2021-07-09 16:06:55 字數 2126 閱讀 4004

金鑰分算演算法簡稱diversify,是指將乙個雙長度(乙個長度金鑰為8個位元組)的主金鑰(mk),對資料進行分散處理,推導出乙個雙長度的des加密金鑰(dk)。該演算法廣泛應用於現在的金融ic卡和其他對於安全要求高的行業。其dk推導過程如下:

推導dk左半部分的方法是:

1、將分散資料的最右8個位元組作為輸入資料;

2、將mk作為加密金鑰;

3、用mk對輸入資料進行3des運算,得到dk左半部分。

推導dk右半部分的方法是:

1、將分散資料的最右8個位元組求反,作為輸入資料;

2、將mk作為加密金鑰;

3、用mk對輸入資料進行3des運算,得到dk右半部分

最後將dk的左右部分各8個位元組合併成雙長度的dk金鑰,即為分散所求得的待使用的3des金鑰。說了這麼多乾巴巴的東西,還是上**吧。因本人使用場景所限,當時只是分別利用了android和ios裡面自帶的一些api介面實現了**,分享一下吧。

android中的**如下:

public static string gettranskey(string workkey, string random) 

try

byte wkleft = trides.encryptwithpkcs5padding(byterandomleft, bytekey);

byte wkright = trides.encryptwithpkcs5padding(byterandomright, bytekey);

byte result = new byte[16];

for (int i = 0; i < wkleft.length; i++)

for (int i = 8; i < result.length; i++)

return hex.encode(result);

} catch (exception e)

return null;

}

ios的**如下:

+ (nsstring *)gettranskey:(nsstring *)key random:(nsstring *)random 

nsdata *workkey = [hex decode:[key datausingencoding:nsutf8stringencoding]];

nsdata *randomleft = [hex decode:[random datausingencoding:nsutf8stringencoding]];

byte *byterandomleft = (byte *)[randomleft bytes];

byte byterandomright[8];

for (int i = 0; i < randomleft.length; i++)

nsdata *workleft = [trides encryptwithdatakey:randomleft key1:[workkey subdatawithrange:nsmakerange(0, 8)] key2:[workkey subdatawithrange:nsmakerange(8, 8)] key3:[workkey subdatawithrange:nsmakerange(0, 8)]];

nsdata *workright = [trides encryptwithdatakey:[nsdata datawithbytes:byterandomright length:8] key1:[workkey subdatawithrange:nsmakerange(0, 8)] key2:[workkey subdatawithrange:nsmakerange(8, 8)] key3:[workkey subdatawithrange:nsmakerange(0, 8)]];

nsmutabledata *result = [nsmutabledata data];

[result setlength:0];

return [[[nsstring alloc] initwithdata:[hex encode:result] encoding:nsutf8stringencoding] autorelease];

}

**中看到的trides是3des加密演算法,將會在下一片博文中介紹。

cartographer演算法簡析

1 魯棒性好,尤其在沒有imu的輔助下,應對旋轉速度高的突然轉向,沒有出現建圖錯誤。由於採用了回環檢測,可以消除積累誤差,建圖效果比較穩定。3 介面封裝得很簡潔,給人的感覺是一款穩定,可靠,易用的軟體包。主要 1.1 real time loop closure in 2d lidar slam i...

ECC演算法簡析

本文重在理清ecc演算法的來龍去脈,關於無窮遠點 攝影平面座標系 fp有限域 阿貝爾群等概念,要重點學習近世代數 關於 實現部分,本文暫未說明。一 射影平面的引入 近世代數中的幾個小概念 1關於無窮遠點,可以理解為平面上兩條平行線的交點 2一組平行直線只有乙個無窮遠點 3相交的兩條平行直線有不同的無...

簡析限流演算法

限流顧名思義是限制流量,限制流量的目的是為了保障服務穩定執行,避免服務被流量沖垮。當流量超出服務處理能力時,部分請求將會被限流元件攔截。被攔截的請求可能會被丟棄,如果是 c 端請求,那麼這個請求可能會被導向指定的錯誤頁上,而不是生硬的拒絕。這裡我們丟棄掉一部分請求,以保證大部分請求可以正常響應。如果...