金鑰分算演算法簡稱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 端請求,那麼這個請求可能會被導向指定的錯誤頁上,而不是生硬的拒絕。這裡我們丟棄掉一部分請求,以保證大部分請求可以正常響應。如果...