簡單的驗證公鑰私鑰簽名認證;
公鑰是對外公開的部分,私鑰是不公開的部分,一般在項目開發中公鑰是給用戶,私鑰是存於服務器上,二者中有一個加密,則需要另外一個來解密。
下面是java實現的一個比較簡單的示例:示例中註釋寫的很詳細,可以大致看下,供參考
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.Signature;
/**
*
* @since 2015年8月20日 下午2:22:08
* @author hym
*/
public class SignDemo {
/**得到產生的私鑰/公鑰對
* @return
* @author hym
*/
public static KeyPair getKeypair(){
//產生RSA密鑰對(myKeyPair)
KeyPairGenerator myKeyGen = null;
try {
myKeyGen = KeyPairGenerator.getInstance("RSA");
myKeyGen.initialize(1024);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
KeyPair myKeyPair = myKeyGen.generateKeyPair();
return myKeyPair;
}
/**根據密鑰對對信息進行加密,返回公鑰值
* @param mySig
* @param myKeyPair
* @param infomation
* @return
* @author hym
*/
public static byte[] getpublicByKeypair(Signature mySig,KeyPair myKeyPair,byte[] infomation){
byte[] publicInfo=null;
try {
mySig.initSign(myKeyPair.getPrivate()); //用私鑰初始化簽名對象
mySig.update(infomation); //將待簽名的數據傳送給簽名對象
publicInfo = mySig.sign(); //返回簽名結果字節數組
} catch (Exception e) {
e.printStackTrace();
}
return publicInfo;
}
/**公鑰驗證簽名
* @param mySig
* @param myKeyPair
* @param infomation
* @param publicInfo
* @return
* @author hym
*/
public static boolean decryptBypublic(Signature mySig, KeyPair myKeyPair,String infomation,byte[] publicInfo){
boolean verify=false;
try {
mySig.initVerify(myKeyPair.getPublic()); //使用公鑰初始化簽名對象,用於驗證簽名
mySig.update(infomation.getBytes()); //更新簽名內容
verify= mySig.verify(publicInfo); //得到驗證結果
} catch (Exception e) {
e.printStackTrace();
}
return verify;
}
public static void main(String[] args) {
try {
KeyPair keyPair=getKeypair();
Signature mySig = Signature.getInstance("MD5WithRSA");//用指定算法產生簽名對象
byte[] publicinfo=getpublicByKeypair(mySig,keyPair,"驗證我".getBytes());
boolean verify=decryptBypublic(mySig, keyPair, "驗證我", publicinfo);
System.out.println("驗證簽名的結果是:"+verify);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
步驟:
1.首先獲得公鑰/私鑰對
2.根據獲得公鑰/私鑰對,根據指定的算法來加密指定的內容,根據私鑰加密獲得相對應的公鑰,公開,給用戶;
3.用戶根據內容來驗證自己是否是跟傳來的公鑰是一對。。。