一:數字簽名簡介
什麼是數字簽名?帶有密鑰(公鑰,私鑰)的消息摘要算法,用於驗 證數據完整性,認證數據來源,以及抗否定。通俗來說就是證實某個消息或 者文件 是本人發出/認同的,這個的話用於的面就比較多了。好比電子合同, 銀行簽約,電子受權等等。因此他的安全性是咱們必需要考慮的。數字簽名 中經常使用的簽名算法有RSA、DSA、ECDSA等。算法
二:數字簽名的基本過程
基本過程以下:安全
(1)發送方生成非對稱加密算法的公鑰和私鑰對,並公佈其公鑰和簽名算法(例如sha256WithRSAEncryption);eclipse
(2)發送方對發送的消息先計算其數字摘要,而後使用私鑰對摘要進行加密,生成數字簽名;ide
(3)接收方在接收到聲稱來自XXX的消息時,先去查詢XXX的公佈的公鑰和簽名算法;編碼
(4)接收方使用公鑰對數字簽名解密並與計算出的數字摘要進行比對,若是比對一致,那麼消息來自於XXX而且未被篡改。加密
上述過程的安全前提基於如下兩點:spa
①發送方的簽名算法沒法被破解,且私鑰未發生泄露code
②接收方查詢的公鑰以及簽名算法屬實blog
三:在eclipse中分析DSA簽名算法
(1)在主類Mainactivity中分析ip
分析這幾個自定義方法:
-
getPublicKey(keyMap);//獲取公鑰
-
getPrivateKey(keyMap);//獲取私鑰
-
be.encode(publicKey));//公鑰加密
-
be.encode(privateKey));//私鑰加密
-
DSA.sign(data.getBytes(), privateKey);//講私鑰進行簽名
- DSA.verify(data.getBytes(), publicKey, sign)+"");//進行驗證
(2)在自定義類DSA中分析
幾個重要的方法
- generateKeyPair:生成密鑰對
- getPublic獲取公鑰
- getPrivate:獲取私鑰
- X509EncodedKeySpec:根據給定的編碼密鑰建立一個新的X509EncodedKeySpec
小結
一、介紹數字簽名系列相關的知識以及實現原理。
二、在eclipse中分析了DSA簽名算法的代碼。