簡單的驗證公鑰私鑰簽名認證;
公鑰是對外公開的部分,私鑰是不公開的部分,一般在項目開發中公鑰是給用戶,私鑰是存於服務器上,二者中有一個加密,則需要另外一個來解密。
下面是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.用戶根據內容來驗證自己是否是跟傳來的公鑰是一對。。。
懷有希望!!