Java中RSA非對稱金鑰加解密使用

2021-06-09 04:27:51 字數 2906 閱讀 6763

一、簡介:

rsa加密演算法是最常用的非對稱加密演算法,cfca在證書服務中離不了它。rsa是第乙個比較完善的公開金鑰演算法,它既能用於加密,也能用於數字簽名。這個演算法經受住了多年深入的密碼分析,雖然密碼分析者既不能證明也不能否定rsa的安全性,但這恰恰說明該演算法有一定的可信性,目前它已經成為最流行的公開金鑰演算法。

二、rsa的公鑰、私鑰的組成,以及加密、解密的公式可見於下表

三、使用方式:

①  假設a、b機器進行通訊,已a機器為主;

②  a首先需要用自己的私鑰為傳送請求資料簽名,並將公鑰一同傳送給b;

③  b收到資料後,需要用a傳送的公鑰進行驗證,已確保收到的資料是未經篡改的;

④  b驗籤通過後,處理邏輯,並把處理結果返回,返回資料需要用a傳送的公鑰進行加密(公鑰加密後,只能用配對的私鑰解密);

⑤  a收到b返回的資料,使用私鑰解密,至此,一次資料互動完成。

四、**示例:

第一步獲取私鑰,為簽名做準備。

/**

* 讀取私鑰 返回privatekey

* @param

path 包含私鑰的證書路徑

* @param

password 私鑰證書密碼

* @return

返回私鑰privatekey

* @throws

keystoreexception

* @throws

nosuchalgorithmexception

* @throws

certificateexception

* @throws

ioexception

* @throws

unrecoverablekeyexception

*/private

static

privatekey getprivatekey(string path,string password)

throws

keystoreexception, nosuchalgorithmexception, certificateexception,

ioexception, unrecoverablekeyexception

else

ks.load(fis, npassword);

fis.close();

enumeration

en =ks.aliases();

string keyalias = null

;

if(en.hasmoreelements())

return

(privatekey) ks.getkey(keyalias, npassword);

}

簽名示例  通過第一步得到的私鑰,進行簽名操作,具體請看以下**:

/**

* 私鑰簽名: 簽名方法如下:base64(rsa(md5(src),privatekey)),其中src為需要簽名的字串,

privatekey是商戶的cfca證書私鑰。

* @param

plaintext 待簽名字串

* @param

path 簽名私鑰路徑

* @param

password 簽名私鑰密碼

* @return

返回簽名後的字串

* @throws

exception

*/public

static

string sign(string plaintext,string path,string password)

throws

exception

得到公鑰publickey後,再去驗證簽名,**如下:

/**

* 用公鑰證書進行驗籤

* @param

message 簽名之前的原文

* @param

ciphertext 簽名

* @param

pubkeyn 公鑰n串

* @param

pubkeye 公鑰e串

* @return

boolean 驗籤成功為true,失敗為false

* @throws

exception

*/public

static

boolean

verify(string message, string ciphertext,string pubkeyn,

string pubkeye)

throws

exception

else

}

至此,簽名驗籤已經完畢

提供乙個從.cer檔案讀取公鑰的方法:

/**

* 讀取公鑰cer

* @param

path .cer檔案的路徑 如:c:/abc.cer

* @return

base64後的公鑰串

* @throws

ioexception

* @throws

certificateexception

*/public

static string getpublickey(string path) throws

ioexception,

certificateexception

byte result =out.tobytearray();

res =base64.bytearraytobase64(result);

return

res;

}

附上所有**: 

本文**:

RSA非對稱金鑰加密原理

一 基礎數論 1 互質關係 2 尤拉函式 二 rsa加密 第一步,隨機選擇兩個不相等的質數p和q。愛麗絲選擇了61和53。實際應用中,這兩個質數越大,就越難破解。第二步,計算p和q的乘積n。愛麗絲就把61和53相乘。n 61 53 3233 n的長度就是金鑰長度。3233寫成二進位制是1100101...

mysql 非對稱金鑰 RSA非對稱加密演算法

首先要理解的是公鑰加密後私鑰是可以解密的。私鑰加密後公鑰也是可以解密的。公鑰和私鑰是成對出現的。一般都是公鑰加密,私鑰解密。公鑰私鑰原理 張三有兩把鑰匙,一把是公鑰,另一把是私鑰 張三把公鑰送給他的朋友們 李 四 王五 趙六 每人一把 李四要給張三寫一封保密的信。她寫完後用張三的公鑰加密,就可以達到...

Java中RSA非對稱金鑰加解密使用示例

一 簡介 rsa加密演算法是最常用的非對稱加密演算法,cfca在證書服務中離不了它。rsa是第乙個比較完善的公開金鑰演算法,它既能用於加密,也能用於數字簽名。這個演算法經受住了多年深入的密碼分析,雖然密碼分析者既不能證明也不能否定rsa的安全性,但這恰恰說明該演算法有一定的可信性,目前它已經成為最流...