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

懷有希望!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM