简单的验证公钥私钥签名认证;
公钥是对外公开的部分,私钥是不公开的部分,一般在项目开发中公钥是给用户,私钥是存于服务器上,二者中有一个加密,则需要另外一个来解密。
下面是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.用户根据内容来验证自己是否是跟传来的公钥是一对。。。
怀有希望!!