公共類密鑰生成器{
私有字節[]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
}
}
}
望采納,謝謝。