古詩詞大全網 - 個性簽名 - JAVA公鑰加密和私鑰解密怎麽解決?

JAVA公鑰加密和私鑰解密怎麽解決?

壹個相對簡單的實現:壹個三類KeyGenerater生成壹個公鑰和私鑰對,Signaturer類用私鑰簽名,SignProvider用公鑰驗證。公鑰和私鑰都是用Base64加密的,也在博客裏。

公共類密鑰生成器{

私有字節[]priKey;

私有字節[]pubKey;

公共void生成器(){

嘗試{

Java . security . key pair generator keygen = Java . security . key pair generator

。getInstance(“RSA”);

SecureRandom sec rand = new SecureRandom();

secrand.setSeed("syj "。getBytes());//初始化隨機生成器

keygen.initialize(1024,sec rand);

key pair keys = keygen . genkey pair();

public key pubkey = keys . getpublic();

private key prikey = keys . get private();

pubKey = base64 . encodetobyte(pubKey . get encoded());

priKey = base64 . encodetobyte(priKey . get encoded());

system . out . println(" pubKey = "+new String(pubKey));

system . out . println(" priKey = "+new String(priKey));

} catch (java.lang.Exception e) {

System.out.println("生成密鑰對失敗");

e . printstacktrace();

}

}

public byte[] getPriKey() {

返回priKey

}

public byte[] getPubKey() {

返回pubKey

}

}

公共類簽名者{

/**

*

*描述:數字簽名

*

* @param priKeyText

* @param明文

* @返回

* @作者孫雨佳

* @自:2007-12-27上午10:51:48

*/

公共靜態字節[]符號(字節[] priKeyText,字符串明文){

嘗試{

pkcs 8 encodedkeyspec pripkcs 8 = new pkcs 8 encodedkeyspec(Base64

。decode(priKeyText));

key factory keyf = key factory . getinstance(" RSA ");

private key prikey = keyf . generate private(prip kcs 8);

//用私鑰為信息生成數字簽名。

Java . security . signet signet = Java . security . signature

。getInstance(" MD 5 with RSA ");

signet . init sign(prikey);

signet . update(plaintext . getbytes());

byte[]signed = base64 . encodetobyte(signet . sign());

已簽名的退貨;

} catch (java.lang.Exception e) {

System.out.println("簽名失敗");

e . printstacktrace();

}

返回null

}

}

公共類SignProvider {

私有SignProvider() {

}

/**

*

*描述:檢查數字簽名。該方法不會拋出任務異常,成功則返回true,失敗則返回false。所有參數不得為空。

*

* @param pubKeyText

*公鑰,base64編碼

* @param明文

*純文本

* @param信號測試

*數字簽名的密文,base64編碼。

* @返回驗證成功返回true,失敗返回false。

* @作者孫雨佳

* @自:2007-12-27上午09:33:55

*/

公共靜態布爾驗證(byte[] pubKeyText,字符串明文,

byte[] signText) {

嘗試{

//解密base64編碼的公鑰,並構造壹個X509EncodedKeySpec對象。

Java . security . spec . x 509 encodedkeyspec bobPubKeySpec = new Java . security . spec . x 509 encodedkeyspec(

base64 . decode(pubKeyText));

// RSA對稱加密算法

Java . security . key factory key factory = Java . security . key factory

。getInstance(“RSA”);

//獲取公鑰對象

Java . security . public key pubKey = key factory

。generate public(bobPubKeySpec);

//解密base64編碼的數字簽名。

byte[]signed = base64 . decode(sign text);

Java . security . signature signature checker = Java . security . signature

。getInstance(" MD 5 with RSA ");

signaturechecker . init verify(pubKey);

signature checker . update(plaintext . getbytes());

//驗證簽名是否正常。

if (signatureChecker.verify(已簽名))

返回true

其他

返回false

} catch(可投擲e) {

System.out.println("簽名驗證失敗");

e . printstacktrace();

返回false

}

}

}

望采納,謝謝。