有一對兄弟,他們的傢住在80層樓上。有一天他們外出旅行回傢,發現大樓停電了!雖然他們揹著大包的行李,但看來沒有什麼別的選擇,於是哥哥對弟弟說,我們就爬樓梯上去!於是,他們揹著兩大包行李開始爬樓梯。爬到20樓的時候他們開始累了,哥哥說“包包太重了,不如這樣吧,我們把包包放在這裏,等來電後坐電梯來拿。"於是,他們把行李放在了20樓,輕松多了,繼續向上爬。­

  他們有說有笑地往上爬,但是好景不長,到了40樓,兩人實在累了。想到還只爬了一半,兩人開始互相埋怨,指責對方不注意大樓的停電公告,才會落得如此下場。他們邊吵邊爬,就這樣一路爬到了60樓。到了60樓,他們累得連吵架的力氣也沒有了。弟弟對哥哥說,“我們不要吵了,爬完它吧。"於是他們默默地繼續爬樓,終於80樓到了!興奮地來到傢門口兄弟倆才發現他們的鑰匙留在了20樓的包包裏了。­

人因夢想而偉大,機會永遠屬於那些有准備並立即行動的人!  ­

一、將一個緩沖區編碼
1.首先聲明一個字符串來存放編碼的結果
  string str;
2.接著聲明一個編碼器(HexEncoder可替換為Base64Encoder等)對象,並通過StringSink類關聯兩者
  HexEncoder encoder(new StringSink(str));
3.將數据放入編碼器中
  byte buf[1024];
  ...
  encoder.Put(buf, sizeof(buf));
  SetDlgItemText(IDC_EDIT_TEST, spk.data());
4.調用MessageEnd函數結束編碼
  encoder.MessageEnd();
 
二、BufferedTransformation、BlockTransformation、StreamTransformation、HashTransformation
這僟個類都是對輸入的緩沖區進行某種運算後輸出,但是有一些差別
1.BufferedTransformation:是對緩沖區進行某種變換,這種變換式可以還原的
2.BlockTransformation:基本與BufferedTransformation相同,不同之處在於它是以塊為單位
3.StreamTransformation:與BufferedTransformation差不多相同,不同之處在於是以流式方式,如網絡套結字
4.HashTransformation:是對緩沖區計算哈希值,這種變換是不可還原的
 
三、Sink類及其派生類的作用
Sink類及其派生類,以下簡稱Sink類,它們的作用是在真實的數据和緩沖區變換類之間起一個連接的作用,Sink類由BufferedTransformation派生,但是不能產生任何輸入輸出,所有對它的操作都是對它所指向的數据的操作。每個Sink類必須與一個正式的數据關聯起來。因為
1.ArraySink:操作字節數据
2.StringSink:操作字符串數据
3.ArrayXorSink:操作字節數据,但是會對緩沖區進行異或運算
4.FileSink:操作文件
 
四、SecByteBlock和ByteQueue
兩個類都描述了一個字節為單位的緩沖區,所不同的是SecByteBlock所分配的緩沖區時連續的,而ByteQueue則是用鏈表實現的
1.使用SecBlock類可以動態分配指定字節數的內容,並在類析搆時自動釋放,而且可以作為指定類的指針使用,有些方面類似於auto_ptr
 
五、橢圓曲線加密(ECIES)、簽名(ECDSA)算法
1.ECIES
搆造方法
AutoSeededRandomPool rng;// 隨機數產生器
ECIES<EC2N>::Decryptor cpriv(rng, ASN1::sect193r1());// 俬鑰,自己保留
ECIES<ECP>::Encryptor cpub(cpriv);// 公鑰,提供給用戶
注意:橢圓曲線加密算法是擁有公鑰的人將數据加密後,密文發送給自己,自己來解密,所以不適用於注冊碼的生成
2.ECDSA
以下描述一個自定義的橢圓曲線的搆造過程(以GF(p)上的橢圓曲線為例),參數可從以下網址得到http://www.cryptomathic.dk/labs/ellipticcurvedemo.html
//
Integer modulus("199999999999999999999999980586675243082581144187569");
// a、b為橢圓曲線參數
Integer a("659942,b7261b,249174,c86bd5,e2a65b,45fe07,37d110h");
Integer b("3ece7d,09473d,666000,5baef5,d4e00e,30159d,2df49ah");
// 計算基點G的兩個參數x、y
Integer x("25dd61,4c0667,81abc0,fe6c84,fefaa3,858ca6,96d0e8h");
Integer y("4e2477,05aab0,b3497f,d62b5e,78a531,446729,6c3fach");
Integer r("100000000000000000000000000000000000000000000000151");
Integer k(2);
// 俬有密鑰
Integer d("76572944925670636209790912427415155085360939712345");
 
// 橢圓曲線
ECP ec(modulus, a, b);
// P為基點G
ECP::Point P(x, y);
// 計算基點G
P = ec.Multiply(k, P);
// Q為公開密鑰
ECP::Point Q(ec.Multiply(d, P));
ECIES<ECP>::Decryptor cpriv(ec, P, r, d);
ECIES<ECP>::Encryptor cpub(cpriv);
ECDSA<ECP, SHA>::Signer spriv(cpriv);
ECDSA<ECP, SHA>::Verifier spub(spriv);
ECDH<ECP>,LV M42226 Noe 小號 單肩包 老花系列 LV包包價格、目錄、型錄、新款 官方網站旗艦店;::Domain ecdhc(ec, P, r, k);
ECMQV<ECP>::Domain ecmqvc(ec, P, r, k);
 
3.橢圓曲線上的點的階(Order of point)
橢圓曲線的簽名的長度是由基點P的階的長度決定的,和素數的長度無關。所以橢圓曲線可以選取素數較大的類型。
 
4.橢圓曲線的密鑰
俬鑰是一個大數,而公鑰則是一個點。

  有人說,這個故事其實就是反映了我們的人生:20歲之前,我們活在傢人、老師的期望之下,揹負著很多的壓力、包袱,自己也不夠成熟、能力不足,因此步履難免不穩。20歲之後,離開了眾人的壓力,卸下了包袱,開始全力以赴地追求自己的夢想,就這樣愉快地過了20年。可是到了40歲,發現青春已逝,不免產生許多的遺憾和追悔,於是開始遺憾這個、惋惜那個、抱怨這個、嫉恨那個,就這樣在抱怨中度過了20年。到了60歲,發現人生已所剩不多,於是告訴自己不要在抱怨了,就珍惜剩下的日子吧!於是默默地走完了自己的余年。到了生命的儘頭,才想起自己好象有什麼事情沒有完成,原來,我們所有的夢想都留在了20歲的青春歲月。­

arrow
arrow
    全站熱搜

    加藤 纪子 發表在 痞客邦 留言(0) 人氣()