驗證簽名機制——java示例

簡單的驗證公鑰私鑰簽名認證;

公鑰是對外公開的部分,私鑰是不公開的部分,一般在項目開發中公鑰是給用戶,私鑰是存於服務器上,二者中有一個加密,則需要另外一個來解密。

下面是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.用戶根據內容來驗證自己是否是跟傳來的公鑰是一對。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章